библиотека не найдена для -lboost_system - PullRequest
9 голосов
/ 17 июля 2011

Я установил boost, используя macports. Файлы отображаются в / opt / local / include / boost /

Мой make-файл больше не работает, и я получаю следующую ошибку

Undefined symbols:
"boost::system::generic_category()", referenced from:
  __static_initialization_and_destruction_0(int, int)in client.o
  __static_initialization_and_destruction_0(int, int)in client.o
"boost::system::system_category()", referenced from:
  boost::asio::error::get_system_category()    in client.o
  boost::system::error_code::error_code()in client.o
  __static_initialization_and_destruction_0(int, int)in client.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [client] Error 1

в школе решением было использование -lboost_system в качестве аргумента для g ++, но теперь, когда я перенес проект домой на свой Mac, это не работает. Я думаю, что это в основном из-за того, что в школе файлы повышения были в usr / local / lib (или где-то похожем).

Когда я добавляю аргумент -lboost_system, я получаю следующее сообщение

g++ -I/opt/local/include -lboost_system -o client client.o Packet.o
ld: library not found for -lboost_system
collect2: ld returned 1 exit status
make: *** [client] Error 1

Я пробовал несколько вариантов, используя -L и -l, но я не могу найти комбо, которое работает. В школе мне тоже не нужно использовать -L. Я прочитал несколько других постов о подобных проблемах, но они исправили это, добавив флаги -l, которые у меня не работают.

Помощь! спасибо!

Ответы [ 2 ]

13 голосов
/ 17 июля 2011

Вам не хватает -L/opt/local/lib.Вы должны иметь возможность установить LDFLAGS в вашем Makefile:

LDFLAGS=-L/opt/local/lib

Это предполагает, что библиотеки Boost находятся в /opt/local/lib.

Если вы не используетеобычные CXXFLAGS и LDFLAGS переменные в вашем Makefile, затем добавьте -L/opt/local/lib непосредственно в ваше окончательное правило:

client: client.o Packet.o
    g++ -L/opt/local/lib -o client client.o Packet.o -lboost_system

-I только сообщает компилятору, где находятся заголовочные файлы, компоновщик нуждаетсябиблиотеки и вы используете -L для этого.

1 голос
/ 16 ноября 2016

Вы можете попытаться найти ее в своей системе следующим образом:

/sbin/ldconfig -p | grep boost_system | cut -d\> -f2

, если библиотека установлена, то она должна показать что-то вроде этого:

/usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0

илибудет показывать только пустую строку

В вашем случае кажется, что boost установлен в другом месте, отсюда необходимость в дополнительной информации о компоновщике, отсюда и необходимость в ключе -L, если он у вас есть в / usr/ lib, так как мне больше не нужна дополнительная информация в makefile

...