我正在做一个处理非谷歌 chrome 的项目。我的部分任务是修改一些分布在多个头文件中的参数。我的想法是有一个自定义类,它可以从配置文件中加载数据,将其保存到自定义类中的变量中,然后更新不同类中所需的参数。
其他信息:
- 我正在发布模式下构建Chromium,而不是组件。
- 我的想法是把这个类放在src/base中,因为我想在其他类中重用它,我认为它应该放在较低级别的某个地方。
- 我不是C++高手
这个想法在我作为测试构建的一个单独的、更小的解决方案中可以工作,但在chromium中无法正常工作。
variables.h
#ifndef VARIABLES_H
#define VARIABLES_H
namespace base {
class GlobVars {
public:
static void updateVars();
static int getDevMem();
private:
// config vars
static int device_memory;
static double battery_percentage;
//static std::string user_agent, platform;
};
} // namespace base
#endif
variables.cc
#include "variables.h"
namespace base {
int GlobVars::device_memory = 0;
double GlobVars::battery_percentage = 0;
//std::string GlobVars::user_agent = "", GlobVars::platform = "";
void GlobVars::updateVars() {
device_memory = 456;
battery_percentage = 0.768;
}
int GlobVars::getDevMem(){
return device_memory;
}
} // namespace base
下面是我尝试使用getDevMem()函数的地方:
#include "third_party/blink/public/common/device_memory/approximated_device_memory.h"
#include "base/check_op.h"
#include "base/system/sys_info.h"
#include "base/variables.h"
namespace blink {
// static
float ApproximatedDeviceMemory::approximated_device_memory_gb_ = 0.0;
int64_t ApproximatedDeviceMemory::physical_memory_mb_ = 0;
// static
float ApproximatedDeviceMemory::GetApproximatedDeviceMemory() {
return ::base::GlobVars::getDevMem();
//return approximated_device_memory_gb_;
}
} // namespace blink
下面是我不断收到的具体错误消息:
FAILED: chromedriver_unittests.exe chromedriver_unittests.exe.pdb
..\\..\\third_party\\llvm-build\\Release+Asserts\\bin\\lld-link.exe /OUT:./chromedriver_unittests.exe /nologo -libpath:..\\..\\third_party\\llvm-build\\Release+Asserts\\lib\\clang\\16.0.0\\lib\\windows "-libpath:../../../../../../../Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.33.31629/ATLMFC/lib/x64" "-libpath:../../../../../../../Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.33.31629/lib/x64" "-libpath:../../../../../../../Program Files (x86)/Windows Kits/NETFXSDK/4.8/lib/um/x64" "-libpath:../../../../../../../Program Files (x86)/Windows Kits/10/lib/10.0.20348.0/ucrt/x64" "-libpath:../../../../../../../Program Files (x86)/Windows Kits/10/lib/10.0.20348.0/um/x64" /MACHINE:X64 /PDB:./chromedriver_unittests.exe.pdb @./chromedriver_unittests.exe.rsp
lld-link: error: undefined symbol: public: static int \__cdecl base::GlobVars::getDevMem(void)
\\\>\>\> referenced by ../../third_party/blink/common/device_memory/approximated_device_memory.cc
\\\>\>\> obj/third_party/blink/common/common/approximated_device_memory.obj
\[15619/17044\] CXX obj/v8/torque_generated_definitions/js-objects-tq.obj
ninja: build stopped: subcommand failed.
我认为只要包含头文件就足以访问静态变量,但我一直收到未定义符号错误。我的第一个方法是尝试使用extern关键字,但由于这更像C,我用类实现,但我仍然有同样的问题。
1条答案
按热度按时间bgibtngc1#
我得到了它的工作,我必须编辑BUILD.gn文件在单独的文件夹中,以包括.h和.cc文件。