与libmaxminddb链接

时间:2014-04-21 13:08:12

标签: linker cmake undefined-reference geoip

我试图用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)'

2 个答案:

答案 0 :(得分:0)

您是否考虑过更改链接顺序?这通常有助于解决您的问题。

而不是

target_link_libraries(foo maxminddb object1 object2 object3)

进一步向后移动maxminddb,以便链接器已经知道要查找的函数     target_link_libraries(foo object1 object2 object3 maxminddb)

注意:如果libmaxminddb本身需要其他库,请说libalibb,请务必将它们放在maxminddb

target_link_libraries(foo object1 object2 object3 maxminddb liba libb)

答案 1 :(得分:0)

发现解决方案: 使用C ++时,#include <maxminddb.h>必须在extern "C"{}内。