昨天我發佈了this question,它被標記爲重複項,讀完原始代碼後,我能夠讓我的編譯更進一步。 (一旦我解決了這個問題或放棄了,將刪除鏈接的問題)。C++/G ++ Maxmind geolite2 ++第三方共享對象undefined參考
現在我有兩個g ++命令編譯爲一個.o文件,但仍保留與我從this library(geolite2 ++)獲得的第三方.so相關的未定義引用錯誤。
這裏是我的編譯命令:
sudo g++ -std=c++11 -I/home/ubuntu -L/home/ubuntu -g -lstdc++ -lgeolite2++ -c -O2 -MMD -MP -MF "main.o.d" -o main.o main.cpp
(似乎工作)
sudo g++ -std=c++11 -L/home/ubuntu -I/home/ubuntu -pthread -g -o main main.o -lstdc++ -lgeolite2++ -lz -ldl
(生成以下錯誤)
/home/ubuntu/libgeolite2++.so: undefined reference to `MMDB_lookup_string'
/home/ubuntu/libgeolite2++.so: undefined reference to `MMDB_free_entry_data_list'
/home/ubuntu/libgeolite2++.so: undefined reference to `MMDB_open'
/home/ubuntu/libgeolite2++.so: undefined reference to `MMDB_strerror'
/home/ubuntu/libgeolite2++.so: undefined reference to `MMDB_lib_version'
/home/ubuntu/libgeolite2++.so: undefined reference to `MMDB_aget_value'
/home/ubuntu/libgeolite2++.so: undefined reference to `MMDB_get_entry_data_list'
/home/ubuntu/libgeolite2++.so: undefined reference to `MMDB_get_metadata_as_entry_data_list'
/home/ubuntu/libgeolite2++.so: undefined reference to `MMDB_close'
collect2: error: ld returned 1 exit status
我做更多的研究和閱讀here(由Dmitry Yudakov回答)我可以使用ldd
命令查看是否/home/ubuntu/libgeolite2++.so
共享對象已發現它的依賴關係。我的輸出結果表明是不是這樣的:
ldd /home/ubuntu/libgeolite2++.so
linux-vdso.so.1 => (0x00007ffe7fae1000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb281442000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb28122c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb280e64000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb280b5e000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb2819d6000)
這裏是我的程序代碼:
#include <cstdlib>
#include <iostream>
#include <GeoLite2PP.hpp>
#include <GeoLite2PP_error_category.hpp>
#include <GeoLite2PP_version.hpp>
using namespace std;
using namespace GeoLite2PP;
int main(int argc,char* argv[]) {
GeoLite2PP::DB db("./GeoIP2-City.mmdb");
std::string json = db.lookup("216.58.216.163");
std::cout << json << std::endl;
}
因此我的問題是,這是與/home/ubuntu/libgeolite2++.so
共享庫,是我的錯或者是一個問題這是圖書館的問題嗎?答案可以在我的原始問題(上面的鏈接)的副本中找到,或者是其他內容嗎?如果這個問題非常新鮮,可以提前道歉,但是我有點偏離我的深度。預先感謝您的幫助。
問候,
詹姆斯
謝謝BoundaryImposition,代碼中有聯繫人,我會報告事件。 –