2015-10-21 2 views
0

Я получаю некоторые неопределенные ссылки со связыванием статических и динамических библиотек.Неразрешенные символы, связывающие статические библиотеки

Моя цель - получить исполняемый файл с библиотеками 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 указывается после этого

Любая идея о том, что я делаю неправильно? Заранее спасибо

ответ

2

пола и CEIL функций определены в библиотеке Math, и я не вижу, что вы связь с libm с помощью -lm флага

+0

Это верно! Благодаря! – lrleon

Смежные вопросы