Chrome 如何在chromium源代码中添加一个新类?Linker不会看到新类的新头文件和.cc文件

7jmck4yq  于 2022-12-16  发布在  Go
关注(0)|答案(1)|浏览(202)

我正在做一个处理非谷歌 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,我用类实现,但我仍然有同样的问题。

bgibtngc

bgibtngc1#

我得到了它的工作,我必须编辑BUILD.gn文件在单独的文件夹中,以包括.h和.cc文件。

相关问题