C++ C++;/G++;Maxmind geolite2++;第三方共享对象未定义引用

C++ C++;/G++;Maxmind geolite2++;第三方共享对象未定义引用,c++,g++,maxmind,C++,G++,Maxmind,我昨天发布了一个标记为副本的帖子,在阅读了原文之后,我能够让我的编译更进一步。(在我解决或放弃此问题后,将删除链接问题) 现在我有两个g++命令编译成一个.o文件,但仍然存在关于第三方的未定义引用错误 以下是我的编译命令: 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 (似乎有效) (生成以下

我昨天发布了一个标记为副本的帖子,在阅读了原文之后,我能够让我的编译更进一步。(在我解决或放弃此问题后,将删除链接问题)

现在我有两个g++命令编译成一个.o文件,但仍然存在关于第三方的未定义引用错误

以下是我的编译命令:

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
(似乎有效)

(生成以下错误)

我做了更多的研究并阅读了(Dmitry Yudakov的回答),我可以使用
ldd
命令查看
/home/ubuntu/libgeolite2++。因此
共享对象已经找到了它的依赖项。我的输出表明情况并非如此:

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;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
使用名称空间GeoLite2PP;
int main(int argc,char*argv[]){
GeoLite2PP::DB DB(“./GeoIP2 City.mmdb”);
std::string json=db.lookup(“216.58.216.163”);

通过谷歌搜索那些未定义的符号,libgeolite2++似乎有一个未声明(且未记录)的依赖关系

由于它是未声明的,
ldd
没有任何帮助;但是,即使声明了它,您仍然需要将其他依赖项链接到可执行文件中


您可以深入安装和链接该依赖项,和/或与libgeolite2++的作者交谈。

感谢BoundaryPosition,代码中有联系人,我将报告事件。
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;
}