poco c ++ проблемы статического связывания с неопределенными ссылками на символы

Я пытаюсь ссылаться на статические версии библиотек POCO C ++, например:

g++ BCCMain.o -L$_POCO_LIBS -Wl,-Bstatic $_POCO_LIBS/libPocoFoundation.a $_POCO_LIBS/libPocoUtil.a $_POCO_LIBS/libPocoXML.a $_POCO_LIBS/libPocoJSON.a -Wl,-Bdynamic -o BCMain

К сожалению, это дает ошибки о некоторых неопределенных ссылках на символы, такие как:

Poco::Logger::get(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)

даже если Poco::Logger::get(std::string const&) на самом деле определяется в libPocoFoundation.a,

Теперь, если я попытаюсь дать ссылку на общую версию библиотеки lib, она работает:

g++ BCCMain.o -L$_POCO_LIBS -Wl,-Bstatic $_POCO_LIBS/libPocoFoundation.a $_POCO_LIBS/libPocoUtil.a $_POCO_LIBS/libPocoXML.a $_POCO_LIBS/libPocoJSON.a -Wl,-Bdynamic -lPocoFoundation -o BCMain

Статические и общие версии библиотек имеют одинаковые символы, поэтому мне сложно понять, что я делаю неправильно.

Ubuntu / Linaro. g ++ 4.6.3

5

Решение

Мой опыт показывает, что порядок связывания библиотек Poco важен, когда он статически связан.
Кажется важным фонд, чтобы быть последним.

Порядок, который работает для меня:

  1. Util
  2. Сеть
  3. XML
  4. Фонд
14

Другие решения

Мне удалось решить эту проблему, разделив компиляцию и компоновку. Вот как выглядит моя шахта:

Обобщение:
g++ -c -std=c++0x -ggdb -I/home/bbogart/src/of_v0071_linux64_release/libs/poco/includepkg-config opencv —cflags*.cpp

ссылка на сайт:
g++ *.o -L/home/bbogart/src/of_v0071_linux64_release/libs/poco/lib/linux64/ -lPocoNet -lPocoUtil -lPocoFoundation -lopencv_gpupkg-config opencv —libs-o cameraGrabber

Обратите внимание, что вы опускаете «lib» и «.a» в именах lib.

1

По вопросам рекламы [email protected]