libboost_system未定义对符号的引用,但包含-lboost_system

时间:2018-10-12 17:14:32

标签: c++ gcc boost linker-errors ld

在我的应用程序中构建增强功能,在一台计算机上与另一台计算机上进行编译时出现此错误。我正在使用自动工具。自动生成的文件中的链接行如下:

/usr/bin/ld -plugin /usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper -plugin-opt=-fresolution=/tmp/cct7dMh5.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lpthread -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --sysroot=/ --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -z relro -o soundwave /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o -L../out/lib -L/usr/lib/gcc/x86_64-linux-gnu/5 -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/5/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/5/../../.. -v -rpath $ORIGIN/../lib soundwave-Main.o soundwave-Config.o soundwave-Util.o soundwave-Logger.o soundwave-Constants.o soundwave-Password.o soundwave-Allocator.o soundwave-RingBuffer.o SonarSpeak/soundwave-Response.o SonarSpeak/soundwave-JSON.o SonarSpeak/soundwave-Callback.o SonarSpeak/soundwave-Client.o SonarSpeak/soundwave-Server.o SonarSpeak/soundwave-Base.o SonarSpeak/soundwave-Auth.o SonarSpeak/soundwave-Receiver.o SonarSpeak/soundwave-Command.o SonarSpeak/soundwave-User.o SonarData/soundwave-Server.o SonarData/soundwave-Auth.o SonarData/soundwave-Client.o SonarData/soundwave-Recording.o SonarData/soundwave-Relay.o SonarData/soundwave-Software.o SonarData/soundwave-Convert.o Websocket/soundwave-Server.o Websocket/soundwave-Header.o Protocols/soundwave-Socket.o Protocols/soundwave-Websocket.o TTS/soundwave-Manager.o TTS/soundwave-Request.o Encoder/soundwave-Converter.o Encoder/soundwave-Base.o Encoder/soundwave-sndfile.o Encoder/soundwave-MP3.o Download/soundwave-Manager.o AWS/soundwave-S3.o AWS/soundwave-Base.o AWS/soundwave-Polly.o soundwave-Notify.o Monitor/soundwave-Server.o Monitor/soundwave-Session.o Tunnel/soundwave-Server.o Tunnel/soundwave-RemoteClient.o Tunnel/soundwave-LocalClient.o soundwave-Update.o soundwave-Cleanup.o SonarSuperior/soundwave-Server.o SonarSuperior/soundwave-User.o SonarSuperior/soundwave-Organization.o SonarSuperior/soundwave-Receiver.o SonarSuperior/soundwave-Admin.o SonarSuperior/soundwave-Recording.o SonarSuperior/soundwave-ReceiverGroup.o SonarSuperior/soundwave-Schedule.o SonarSuperior/soundwave-Phone.o SonarSuperior/soundwave-Zone.o SonarSuperior/soundwave-Dialplan.o PhoneConfigurator/soundwave-Server.o -lboost_system -lboost_chrono -lboost_timer -lboost_thread -lboost_log_setup -lboost_log -lboost_filesystem -lboost_regex -lboost_iostreams -lboost_atomic -lboost_date_time -lboost_coroutine -lboost_context /var/builder/soundwave-cpp/out/lib/libpqxx.a -lpq /var/builder/soundwave-cpp/out/lib/libsndfile.so /var/builder/soundwave-cpp/out/lib/libopus.so /var/builder/soundwave-cpp/out/lib/libsamplerate.so /var/builder/soundwave-cpp/out/lib/libmpg123.so /var/builder/soundwave-cpp/out/lib/libout123.so /var/builder/soundwave-cpp/out/lib/libmp3lame.so /var/builder/soundwave-cpp/out/lib/libnghttp2_asio.so -ldw ../lib/curl-asio/.libs/libcurlasio.a ../lib/apm/webrtc/.libs/libapm.a -ldl -lz /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so -lssl -lcrypto -rpath /var/builder/soundwave-cpp/out/lib -rpath /var/builder/soundwave-cpp/out/lib -lstdc++ -lm -lgcc_s -lgcc -lpthread -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crtn.o
GNU ld (GNU Binutils for Ubuntu) 2.26.1
/usr/bin/ld: ../out/lib/libboost_log.so: undefined reference to symbol '_ZN5boost6system6detail19system_category_ncxEv'
../out/lib/libboost_system.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Makefile:855: recipe for target 'soundwave' failed
make[2]: *** [soundwave] Error 1
make[2]: Leaving directory '/var/builder/soundwave-cpp/src'
Makefile:428: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/var/builder/soundwave-cpp'
Makefile:360: recipe for target 'all' failed
make: *** [all] Error 2

这让我感到困惑,因为您可以在前面(../out/lib)清楚地看到-L指定的目录,并且可以看到它将libboost_system与-l链接在一起。 _ZN5boost6system6detail19system_category_ncxEv符号确实存在于out / lib /目录中的libboost_system中。

问题可能是什么?

这是我的Makefile.am:

AUTOMAKE_OPTIONS = subdir-objects

bin_PROGRAMS = soundwave

if DEBUG
bin_PROGRAMS+= buffer_test
endif

soundwave_CPPFLAGS = -std=gnu++14 \
        -I${library_inc} \
        -I${curl_asio_inc} \
        -I${webrtc_base_path} \
        -DRAPIDJSON_HAS_STDSTRING \
        -DBOOST_LOG_DYN_LINK \
        -DWEBRTC_POSIX \
        -DWEBRTC_NS_FIXED \
        -DWEBRTC_LINUX \
        -DUSE_BOOST_REGEX
if DEBUG
soundwave_CPPFLAGS+= -g -O0
else
soundwave_CPPFLAGS+= -g -O2
endif

soundwave_SOURCES =  Main.cpp \
    Config.cpp \
    Config.h \
    Util.cpp \
    Util.h \
    Logger.cpp \
    Logger.h \
    Constants.cpp \
    Constants.h \
    JSON.h \
    Password.cpp \
    Password.h \
    Allocator.h \
    Allocator.cpp \
    RingBuffer.cpp \
    RingBuffer.h \
    SonarSpeak/Response.cpp \
    SonarSpeak/Response.h \
    SonarSpeak/JSON.cpp \
    SonarSpeak/JSON.h \
    SonarSpeak/Callback.cpp \
    SonarSpeak/Callback.h \
    SonarSpeak/Client.cpp \
    SonarSpeak/Client.h \
    SonarSpeak/Server.cpp \
    SonarSpeak/Server.h \
    SonarSpeak/Base.h \
    SonarSpeak/Base.cpp \
    SonarSpeak/Auth.cpp \
    SonarSpeak/Auth.h \
    SonarSpeak/Receiver.cpp \
    SonarSpeak/Receiver.h \
    SonarSpeak/Command.cpp \
    SonarSpeak/Command.h \
    SonarSpeak/User.cpp \
    SonarSpeak/User.h \
    SonarData/Server.cpp \
    SonarData/Server.h \
    SonarData/Auth.cpp \
    SonarData/Auth.h \
    SonarData/Client.cpp \
    SonarData/Client.h \
    SonarData/Recording.cpp \
    SonarData/Recording.h \
    SonarData/Relay.cpp \
    SonarData/Relay.h \
    SonarData/Software.cpp \
    SonarData/Software.h \
    SonarData/Convert.cpp \
    SonarData/Convert.h \
    SonarData/Base.h \
    Websocket/Server.cpp \
    Websocket/Server.h \
    Websocket/Header.cpp \
    Websocket/Header.h \
    Protocols/Socket.cpp \
    Protocols/Socket.h \
    Protocols/Websocket.cpp \
    Protocols/Websocket.h \
    TTS/Manager.cpp \
    TTS/Manager.h \
    TTS/Request.cpp \
    TTS/Request.h \
    Encoder/Converter.cpp \
    Encoder/Converter.h \
    Encoder/Base.cpp \
    Encoder/Base.h \
    Encoder/sndfile.cpp \
    Encoder/sndfile.h \
    Encoder/MP3.cpp \
    Encoder/MP3.h \
    Download/Manager.cpp \
    Download/Manager.h \
    AWS/S3.cpp \
    AWS/S3.h \
    AWS/Base.cpp \
    AWS/Base.h \
    AWS/Polly.cpp \
    AWS/Polly.h \
    Notify.cpp \
    Notify.h \
    Monitor/Server.cpp \
    Monitor/Server.h \
    Monitor/Session.cpp \
    Monitor/Session.h \
    Tunnel/Server.cpp \
    Tunnel/Server.h \
    Tunnel/RemoteClient.cpp \
    Tunnel/RemoteClient.h \
    Tunnel/LocalClient.cpp \
    Tunnel/LocalClient.h \
    Update.cpp \
    Update.h \
    Cleanup.cpp \
    Cleanup.h \
    SonarSuperior/Server.cpp \
    SonarSuperior/Server.h \
    SonarSuperior/User.cpp \
    SonarSuperior/User.h \
    SonarSuperior/Request.h \
    SonarSuperior/Organization.cpp \
    SonarSuperior/Organization.h \
    SonarSuperior/Receiver.cpp \
    SonarSuperior/Receiver.h \
    SonarSuperior/Admin.cpp \
    SonarSuperior/Admin.h \
    SonarSuperior/Recording.cpp \
    SonarSuperior/Recording.h \
    SonarSuperior/ReceiverGroup.cpp \
    SonarSuperior/ReceiverGroup.h \
    SonarSuperior/Schedule.cpp \
    SonarSuperior/Schedule.h \
    SonarSuperior/Phone.cpp \
    SonarSuperior/Phone.h \
    SonarSuperior/Zone.cpp \
    SonarSuperior/Zone.h \
    SonarSuperior/Dialplan.cpp \
    SonarSuperior/Dialplan.h \
    PhoneConfigurator/Server.cpp \
    PhoneConfigurator/Server.h
soundwave_LDADD =  \
        -lboost_system \
        -lboost_chrono \
        -lboost_timer \
        -lboost_thread \
        -lboost_log_setup \
        -lboost_log \
        -lboost_filesystem \
        -lboost_regex \
        -lboost_iostreams \
        -lboost_atomic \
        -lboost_date_time \
        -lboost_coroutine \
        -lboost_context \
        -lpqxx \
        -lcrypto \
        -lssl \
        -lcurl \
        -lsndfile \
        -lopus \
        -lsamplerate \
        -lmpg123 \
        -lout123 \
        -lmp3lame \
        -lnghttp2_asio \
        -ldw \
        ${curl_asio_lib}/libcurlasio.la \
        ${webrtc_base_path}/webrtc/libapm.la


soundwave_LDFLAGS = \
        -Wl,-v \
        -L${library_lib} \
        -pthread \
        -Wl,-rpath,'$$ORIGIN/../lib'

修改 我认为此错误与“为什么链接库的顺序有时会导致GCC(Why does the order in which libraries are linked sometimes cause errors in GCC?)错误的文章不同,因为更改链接顺序并不能解决我的问题。

在最佳输出下,它会因缺少对 boost :: system :: detail :: system_category_instance 的引用而引发更多错误。将-Wl,-start-group添加到LDFLAGS也是一样。

编辑2 对于那些可能遇到类似问题的人,将其从g ++-5升级到g ++-6解决了该问题。我只需要重新编译boost和我的程序就可以了。

0 个答案:

没有答案