2011-07-17 2 views
8

Macport를 사용하여 부스트를 설치했습니다. 파일은 것으로 나타납니다에서/옵션/지역/포함/부스트/내 메이크는 더 이상 작동하지 않습니다와 나는 솔루션 인수로 -lboost_system 사용하는 것이었다 다음과 같은 오류 학교에서-lboost_system에 라이브러리가 없습니다.

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 

을 얻을

g ++로,하지만 지금은 내 맥에 프로젝트를 집으로 가져 갔다,이 작동하지 않습니다. 나는 이것이 학교에서 boost 파일이 usr/local/lib (또는 어딘가 비슷한 곳)에 있다는 사실 때문이라고 생각한다.

나는 내가 -L과 -l을 사용하여 몇 가지 변화를 시도했습니다 다음과 같은 메시지

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 

을 얻을 -lboost_system 인수를 추가 할 때,하지만 작동하는 콤보를 찾을 수 없습니다. 학교에서 나는 또한 -L을 사용할 필요가 없다. 나는 비슷한 문제에 관해서 다른 몇 개의 글을 읽었지만, 나를 위해 일하지 않는 -l 플래그를 추가하여 수정했다.

도움말! 감사!

답변

12

-L/opt/local/lib이 누락되었습니다. 당신은 당신의 메이크에 LDFLAGS을 설정 할 수 있어야한다 :

LDFLAGS=-L/opt/local/lib 

이 부스트 라이브러리는 물론 /opt/local/lib에 있다고 가정합니다. 당신이 당신의 메이크 보통 CXXFLAGSLDFLAGS 변수를 사용하지 않는 경우

후 최종 규칙에 직접 -L/opt/local/lib를 추가

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

-I는 헤더 파일은 컴파일러를 알려줍니다, 링커 도서관이 필요하고 당신은 -L을 사용합니다.

+0

당신은 그것을 보시겠습니까?/opt/local/lib에있는 모든 파일이 있습니다. 이 작품이 희망이되자. – jim

+0

효과가있다! 정말 고마워. 나는 배울 것이 많다. – jim

+1

@jim 배울 점이 하나 이상 있습니다. 답이 맞으면 답을 수락해야합니다. 이 공동 Q & A 시스템이 작동하는 방식입니다. – GrafikRobot

1

당신은 다음과 같이 시스템에서 찾기 위해 시도 할 수 : 라이브러리가 설치되어

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

경우, 다음이 같은 표시해야합니다 :

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

또는 그냥 표시됩니다 빈 줄

귀하의 경우에는 부스트가 다른 장소에 설치되어있는 것으로 보이므로 추가 링커 정보가 필요하므로 -L 스위치가 필요합니다./usr/lib에 있습니다. 메이크 파일에 추가 정보가 필요 없습니다.

관련 문제