我试图用libmaxminddb替换libgeoip。我正在使用CMake构建系统。 链接时它以未定义的引用失败,但是存在-lmaxminddb。
liblua_modules.a是包含对MMDB_open()的调用的库。
Linking CXX executable sauer_server
cd /home/piernov/suckerserv/trunk/suckerserv-v5/release_build/src && /usr/bin/cmake -E cmake_link_script CMakeFiles/sauer_server.dir/link.txt --verbose=1
/usr/bin/c++ CMakeFiles/sauer_server.dir/engine/server.cpp.o CMakeFiles/sauer_server.dir/fpsgame/server.cpp.o CMakeFiles/sauer_server.dir/hopmod/netbans.cpp.o CMakeFiles/sauer_server.dir/hopmod/startup.cpp.o CMakeFiles/sauer_server.dir/hopmod/scheduler.cpp.o CMakeFiles/sauer_server.dir/hopmod/lua.cpp.o CMakeFiles/sauer_server.dir/hopmod/core_bindings.cpp.o CMakeFiles/sauer_server.dir/hopmod/events.cpp.o CMakeFiles/sauer_server.dir/hopmod/signals.cpp.o -o sauer_server -rdynamic -lrt -lz libsauertools.so liblua_modules.a -lboost_thread -lenet libsauertools.so -lrt -lz -llua -lmaxminddb fungu/src/net/http/libfungu_http.a -pthread fungu/src/libfungu_string.a -lboost_system -lssl -lcrypto -lenet -Wl,-rpath,/home/piernov/suckerserv/trunk/suckerserv-v5/release_build/src:
liblua_modules.a(geoip.cpp.o): In function `load_geoip_database(lua_State*)':
geoip.cpp:(.text+0x13e): undefined reference to `MMDB_open(char const*, unsigned int, MMDB_s*)'
geoip.cpp:(.text+0x153): undefined reference to `MMDB_strerror(int)'
答案 0 :(得分:0)
您是否考虑过更改链接顺序?这通常有助于解决您的问题。
而不是
target_link_libraries(foo maxminddb object1 object2 object3)
进一步向后移动maxminddb,以便链接器已经知道要查找的函数 target_link_libraries(foo object1 object2 object3 maxminddb)
注意:如果libmaxminddb
本身需要其他库,请说liba
和libb
,请务必将它们放在maxminddb
target_link_libraries(foo object1 object2 object3 maxminddb liba libb)
答案 1 :(得分:0)
发现解决方案:
使用C ++时,#include <maxminddb.h>
必须在extern "C"{}
内。