어제 this question를 게시했는데 원본을 읽은 후 조금 더 나아갈 수있었습니다. (일단 해결되었거나 포기 된 적이 있으면 연결된 질문이 삭제됩니다.)C++/G ++ Maxmind geolite2 ++ 제 3 자 공유 객체 정의되지 않은 참조
이제 두 개의 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
공유 객체가 종속성을 발견했습니다. 이러한 내 질문은로
#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
공유 라이브러리에 문제가 :
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)
내 프로그램 코드 : 내 출력은 이러한 경우가 나타냅니다 도서관에 문제가 있습니까? 그 대답은 원래의 질문 (위의 링크)의 사본에서 발견 되는가 아니면 다른 것입니까? 이 질문이 아주 새내기 인 경우에 사과, 그러나 나는 나의 깊이에서 조금이다. 모든 도움을 미리 감사드립니다.
감사합니다,
제임스 그 정의되지 않은 심볼을 인터넷 검색을
감사합니다. BoundaryImposition, 코드에 연락처가 있습니다. 사건을보고하겠습니다. –