【问题标题】:Dynamic library link failed LinuxLinux 动态库链接失败
【发布时间】:2020-12-03 10:43:19
【问题描述】:

我为Linux动态库构建了C++应用程序,每个动态库也依赖并链接到其他动态库,构建所有动态库都很好,但是当我构建一个可执行应用程序来链接所有应用程序动态库时,它失败了一个库链接另一个库:

g++ -pthread -Wl,-z,relro -Wl,--copy-dt-needed-entries -Wl,-z,relro -lc -o wifi_scan WiFiScan.o -lmnl -lglib-2.0 -ldbus-1 -ldbus-glib-1 -lgobject-2.0 -lgio-2.0 -lboost_system -lboost_filesystem -lboost_thread -lboost_program_options -lboost_log_setup -lboost_log -lboost_date_time -lssl -lcrypto -lpthread -lmsgpackc -lLogger -lApplication -lNetwork -lUtility

libApplication.so:未定义对 Logger::Log::SystemLog(...) 的引用

但是 Logger::Log::SystemLog(...) 在库链接 -lLogger 中,我可能在这里遗漏了什么?

谢谢。

亲切的问候。

【问题讨论】:

  • 尝试在最后再添加一次-lLogger
  • 最好使用CMake 构建系统。除非你在做这个练习。
  • -l参数的相对顺序很重要!粗略地说,链接器从左到右读取它们,如果在遇到 -lLib 时,以前的代码不需要该库,它将被遗忘。所以,如果Application 使用来自Logger 的东西,你会得到一个未定义的引用。检查库的顺序。如果您有循环依赖,请再次重复一些库或使用-Wl,--start-group/-Wl,--end-group

标签: c++ linux gcc dynamic


【解决方案1】:

感谢 Tomo Ceferin 和所有回复,把 -lLogger 放在最后就成功了。

非常感谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-24
    • 2013-04-07
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 2019-05-26
    • 2019-12-11
    • 1970-01-01
    相关资源
    最近更新 更多