Boost :: Ошибка связывания темы в OSX? - PullRequest
1 голос
/ 05 июня 2010

Так что я схожу с ума, пытаясь понять это. Вот мои основные настройки:

Я собираю разделяемую библиотеку с кучей основных функций, которые используют много полезного. Мы назовем эту библиотеку libpf_core.so. Он связан с расширенными статическими библиотеками, в частности с библиотеками python, system, filesystem, thread и program_options. Это все идет гладко.

Теперь у меня есть небольшая тестовая программа под названием test_socketio, которая скомпилирована в общую библиотеку (она загружается как плагин во время выполнения). Он использует некоторые элементы Boost, такие как Boost :: Bind и Boost :: Thread, и он снова связан libpf_core.so (который включает библиотеки Boost, помните).

Когда я собираюсь скомпилировать test_socketio, из всех моих плагинов выдается ошибка компоновки:

[ Building test_socketio ]
g++ -c -pg -g -O0  -I/usr/local/include -I../include test_socketio.cc -o test_socketio.o
g++ -shared test_socketio.o -lpy_core  -o test_socketio.so
Undefined symbols:
  "boost::lock_error::lock_error()", referenced from:
      boost::unique_lock<boost::mutex>::lock()   in test_socketio.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

И я схожу с ума, пытаясь понять, почему это так. Я попытался явно связать boost :: thread с плагином, но безрезультатно, пытаясь убедиться, что я использую заголовки boost, связанные с библиотеками, связанными с libpf_core.so, на случай возникновения там конфликта.

Есть что-то специфическое для OSX в отношении надстройки, которую мне не хватает? В моем поиске в Google я видел, что ряд других людей получил эту ошибку, но никто, кажется, не нашел удовлетворительного решения.

Edit: понял, OSX поставляется с надстройкой 1,40 в / usr / local / include. Нужно было где-то разместить заголовки для моей версии boost и убедиться, что мои плагины их увидят первыми.

Ответы [ 2 ]

2 голосов
/ 05 июня 2010

Вам необходимо указать ссылку на libboost_thread. Добавьте переключатель -lboost_thread.

0 голосов
/ 05 июня 2010

Когда вы связываете libpf_core.so с библиотеками статического ускорения, он будет получать только копии функций, которые он фактически использует. Компоновщик не заботится о добавлении функций, на которые не ссылается код в вашей библиотеке.

Вам также необходимо связать свою тестовую программу с библиотеками наддува. Вы не можете надежно «связать» связи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...