使用Conan构建依赖geolite2pp的C++项目时出现x86_64未定义符号错误
你遇到的是链接阶段缺失maxminddb库符号的问题——那些_MMDB_*开头的函数都是maxminddb的核心接口,而geolite2pp本身是基于maxminddb开发的,说明Conan在构建过程中没有正确处理这个依赖的传递关系。
下面是几个可行的解决步骤:
显式添加maxminddb依赖:
你的项目conanfile.py只声明了geolite2pp的依赖,但如果该geolite2pp的Conan包没有正确声明它对maxminddb的依赖,就会导致链接时缺失符号。你可以直接在自己的conanfile.py里补充maxminddb的依赖:class AppConan(ConanFile): settings = "os", "compiler", "build_type", "arch" requires = ( "geolite2pp/0.0.1-2561@avantize/stable", "maxminddb/1.7.1" # 选择与geolite2pp兼容的版本即可 ) generators = "cmake"之后重新执行
conan install -s build_type=Release --build=missing,Conan会自动拉取并链接maxminddb库。检查CMake配置正确性:
确保你的项目CMakeLists.txt正确引入了Conan生成的配置文件,比如:include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup() # 链接目标时务必使用Conan提供的变量 target_link_libraries(your_target_name ${CONAN_LIBS})这样才能保证所有依赖库都被正确加入链接阶段。
验证geolite2pp包的依赖声明:
如果上述方法无效,大概率是你使用的geolite2pp/0.0.1-2561@avantize/stable包本身存在问题,没有在它自己的conanfile.py里声明对maxminddb的依赖。这种情况下,你可以尝试更换一个维护更完善的geolite2pp Conan包,或者自行重新打包geolite2pp,在它的conanfile.py里添加requires = "maxminddb/[合适版本]"。
内容的提问来源于stack exchange,提问作者progrrammer

