链接静态库的未解析符号
Unresolved symbols linking static libraries
我在链接静态库和动态库时得到了一些未定义的引用。
我的目标是获得静态链接 poco 和 uiohook 库的可执行文件。为了指定静态链接,我提供了库的直接路径,有些是 path/libName.a
.
以下命令:
/home/lrleon/LLVM-3.7/bin/clang -o collector -g -O2 -fno-strict-aliasing \
collector.o common-vars.o collector-events.o listeners.o \
active_window.o ../lib/libperfq-common.a \
/home/lrleon/aleph-w/libAleph.a /home/lrleon/poco/lib/libPocoNet.a \
/home/lrleon/poco/lib/libPocoFoundation.a /home/lrleon/uiohook/lib/libuiohook.a \
-lstdc++ -lX11 -lcairo -lgsl -lgslcblas -lpthread -lc
给我以下错误:
/home/lrleon/poco/lib/libPocoFoundation.a(DateTime.o):DateTime.cpp:function Poco::DateTime::dayOfWeek() const: error: undefined reference to 'floor'
/home/lrleon/poco/lib/libPocoFoundation.a(DateTime.o):DateTime.cpp:function Poco::DateTime::toJulianDay(int, int, int, int, int, int, int, int): error: undefined reference to 'floor'
/home/lrleon/poco/lib/libPocoFoundation.a(DateTime.o):DateTime.cpp:function Poco::DateTime::toJulianDay(int, int, int, int, int, int, int, int): error: undefined reference to 'floor'
/home/lrleon/poco/lib/libPocoFoundation.a(DateTime.o):DateTime.cpp:function Poco::DateTime::toJulianDay(int, int, int, int, int, int, int, int): error: undefined reference to 'floor'
/home/lrleon/poco/lib/libPocoFoundation.a(NumericString.o):NumericString.cpp:function double_conversion::PowersOfTenCache::GetCachedPowerForBinaryExponentRange(int, int, double_conversion::DiyFp*, int*): error: undefined reference to 'ceil'
/home/lrleon/poco/lib/libPocoFoundation.a(NumericString.o):NumericString.cpp:function double_conversion::BignumDtoa(double, double_conversion::BignumDtoaMode, int, double_conversion::Vector<char>, int*, int*): error: undefined reference to 'ceil'
/home/lrleon/poco/lib/libPocoFoundation.a(NumericString.o):NumericString.cpp:function Poco::floatToStr(std::string&, float, int, int, char, char): error: undefined reference to 'floorf'
src/x11/input_hook.c:673: error: undefined reference to 'XRecordFreeData'
src/x11/input_hook.c:722: error: undefined reference to 'XRecordQueryVersion'
src/x11/input_hook.c:733: error: undefined reference to 'XRecordAllocRange'
src/x11/input_hook.c:745: error: undefined reference to 'XRecordCreateContext'
src/x11/input_hook.c:792: error: undefined reference to 'XRecordEnableContext'
src/x11/input_hook.c:812: error: undefined reference to 'XRecordFreeContext'
src/x11/input_hook.c:883: error: undefined reference to 'XRecordGetContext'
src/x11/input_hook.c:885: error: undefined reference to 'XRecordDisableContext'
src/x11/system_properties.c:134: error: undefined reference to 'XineramaIsActive'
src/x11/system_properties.c:136: error: undefined reference to 'XineramaQueryScreens'
src/x11/system_properties.c:396: error: undefined reference to 'XtGetMultiClickTime'
src/x11/system_properties.c:480: error: undefined reference to 'XtToolkitInitialize'
src/x11/system_properties.c:481: error: undefined reference to 'XtCreateApplicationContext'
src/x11/system_properties.c:485: error: undefined reference to 'XtOpenDisplay'
src/x11/system_properties.c:502: error: undefined reference to 'XtCloseDisplay'
src/x11/system_properties.c:503: error: undefined reference to 'XtDestroyApplicationContext'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我不明白为什么有些符号找不到。例如,ceil
、floor
被poco库引用,但这些符号属于c标准库。据我了解,这些符号应该是可解析的,因为 c 库仅在末尾链接;那是在 poco 图书馆之后。类似于对 X11 符号的引用,我认为这些符号是用 libuiohook 引用的,并且随后给出了链接顺序 -lX11
知道我做错了什么吗?提前致谢
floor 和 ceil 函数在 Math 库中定义,我没有看到您使用 -lm
标志与 libm 链接
我在链接静态库和动态库时得到了一些未定义的引用。
我的目标是获得静态链接 poco 和 uiohook 库的可执行文件。为了指定静态链接,我提供了库的直接路径,有些是 path/libName.a
.
以下命令:
/home/lrleon/LLVM-3.7/bin/clang -o collector -g -O2 -fno-strict-aliasing \
collector.o common-vars.o collector-events.o listeners.o \
active_window.o ../lib/libperfq-common.a \
/home/lrleon/aleph-w/libAleph.a /home/lrleon/poco/lib/libPocoNet.a \
/home/lrleon/poco/lib/libPocoFoundation.a /home/lrleon/uiohook/lib/libuiohook.a \
-lstdc++ -lX11 -lcairo -lgsl -lgslcblas -lpthread -lc
给我以下错误:
/home/lrleon/poco/lib/libPocoFoundation.a(DateTime.o):DateTime.cpp:function Poco::DateTime::dayOfWeek() const: error: undefined reference to 'floor'
/home/lrleon/poco/lib/libPocoFoundation.a(DateTime.o):DateTime.cpp:function Poco::DateTime::toJulianDay(int, int, int, int, int, int, int, int): error: undefined reference to 'floor'
/home/lrleon/poco/lib/libPocoFoundation.a(DateTime.o):DateTime.cpp:function Poco::DateTime::toJulianDay(int, int, int, int, int, int, int, int): error: undefined reference to 'floor'
/home/lrleon/poco/lib/libPocoFoundation.a(DateTime.o):DateTime.cpp:function Poco::DateTime::toJulianDay(int, int, int, int, int, int, int, int): error: undefined reference to 'floor'
/home/lrleon/poco/lib/libPocoFoundation.a(NumericString.o):NumericString.cpp:function double_conversion::PowersOfTenCache::GetCachedPowerForBinaryExponentRange(int, int, double_conversion::DiyFp*, int*): error: undefined reference to 'ceil'
/home/lrleon/poco/lib/libPocoFoundation.a(NumericString.o):NumericString.cpp:function double_conversion::BignumDtoa(double, double_conversion::BignumDtoaMode, int, double_conversion::Vector<char>, int*, int*): error: undefined reference to 'ceil'
/home/lrleon/poco/lib/libPocoFoundation.a(NumericString.o):NumericString.cpp:function Poco::floatToStr(std::string&, float, int, int, char, char): error: undefined reference to 'floorf'
src/x11/input_hook.c:673: error: undefined reference to 'XRecordFreeData'
src/x11/input_hook.c:722: error: undefined reference to 'XRecordQueryVersion'
src/x11/input_hook.c:733: error: undefined reference to 'XRecordAllocRange'
src/x11/input_hook.c:745: error: undefined reference to 'XRecordCreateContext'
src/x11/input_hook.c:792: error: undefined reference to 'XRecordEnableContext'
src/x11/input_hook.c:812: error: undefined reference to 'XRecordFreeContext'
src/x11/input_hook.c:883: error: undefined reference to 'XRecordGetContext'
src/x11/input_hook.c:885: error: undefined reference to 'XRecordDisableContext'
src/x11/system_properties.c:134: error: undefined reference to 'XineramaIsActive'
src/x11/system_properties.c:136: error: undefined reference to 'XineramaQueryScreens'
src/x11/system_properties.c:396: error: undefined reference to 'XtGetMultiClickTime'
src/x11/system_properties.c:480: error: undefined reference to 'XtToolkitInitialize'
src/x11/system_properties.c:481: error: undefined reference to 'XtCreateApplicationContext'
src/x11/system_properties.c:485: error: undefined reference to 'XtOpenDisplay'
src/x11/system_properties.c:502: error: undefined reference to 'XtCloseDisplay'
src/x11/system_properties.c:503: error: undefined reference to 'XtDestroyApplicationContext'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我不明白为什么有些符号找不到。例如,ceil
、floor
被poco库引用,但这些符号属于c标准库。据我了解,这些符号应该是可解析的,因为 c 库仅在末尾链接;那是在 poco 图书馆之后。类似于对 X11 符号的引用,我认为这些符号是用 libuiohook 引用的,并且随后给出了链接顺序 -lX11
知道我做错了什么吗?提前致谢
floor 和 ceil 函数在 Math 库中定义,我没有看到您使用 -lm
标志与 libm 链接