2016-12-14 1 views
1

나는 귀찮게 들리 겠지만 나는 그것을 해결하기 위해 모든 노력을 다했음을 느낀다. 나는 생각이 없다.두통을 동반 한 공유 부스트 라이브러리에 연결

나는이 문장을 포함하여 부스트/program_options.hpp를 사용하여 내가 쓴 프로그램이

#include <boost/program_options.hpp> 

이 프로그램은 내 컴퓨터에서 작동하며 지금은 내가하지 않는 서버에 넣어 위해 노력하고 있어요 sudo 권한이 있어야합니다. 내 랩탑에서, 모든 것이 작동하는 곳에서는 1.56과 1.58을 부스트했고, 서버에서 1.53.0을 찾았습니다. 나는 이것을 설치하거나 구축하지 않았다.

서버에있는 공유 라이브러리 파일은 다음과 같습니다 저에 LDD를 실행 /usr/lib64/libboost_program_options.so.1.53.0

나에게 출력을 제공합니다

ldd /usr/lib64/libboost_program_options.so.1.53.0 
linux-vdso.so.1 => (0x00007ffc54a63000) 
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fc0dcad8000) 
libm.so.6 => /lib64/libm.so.6 (0x00007fc0dc7d5000) 
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc0dc5bf000) 
libc.so.6 => /lib64/libc.so.6 (0x00007fc0dc1fe000) 
/lib64/ld-linux-x86-64.so.2 (0x00007fc0dd071000) 

을 어느 I 가정은 모든 의존성을 찾았 음을 의미합니다.

libboost_program_options.so 링크를 만들기 위해 홈 디렉토리에 심볼릭 링크를 만들었습니다.이 링크는 -lboost_program_options 링커 플래그가 작동해야 함을 의미합니다.

내가 컴파일 방법은 것입니다 :

g++ -L/home/homeDir code.cpp -o code.o -std=c++11 -Wall -lboost_program_options 

내가 가진 전부입니다 :

fatal error: boost/program_options.hpp: No such file or directory 
#include "boost/program_options.hpp" 
            ^
compilation terminated. 

내가 시세 및 <>와 함께이 시도했습니다, 그리고없이 "부스트 /"등, 그러나 나는 항상 같은 불평을 받는다. -lboost_program_options 플래그에 대한 불만이 없으므로 이것이 라이브러리를 찾았다 고 가정합니다.

내 컴퓨터에서 작동하지만 공유 프로그램 옵션 라이브러리를 전혀 사용하지 않았을 수 있습니다. 내 랩탑에서는 라이브러리 경로에 정적 버전의 libboost_program_options가 있고 라이브러리 경로에 포함될 program_options.hpp 헤더가 있습니다. 나는 서버에있는 공유 라이브러리를 사용할 수 있어야하고 서버 관리자를 5 번이나 괴롭히지 않아야한다고 생각한다.

이것이 내 감독 인 경우 유감입니다. 나는 상당히 새로운 일이지만, 지금 당장이 문제를 해결하기 위해 모든 노력을 기울였습니다.

내가 어떻게 바꿀 수 있는지에 대한 제안이 있으면 좋겠어. 아니면 공유 라이브러리를 사용하는 것만으로도 바보가된다.

미리 감사드립니다.

편집 : 더 많은 연구를 한 후 정적 라이브러리와 공유 라이브러리를 혼동스럽게 생각합니다. 나는 컴파일 타임에 공유 라이브러리를 링크하려고하는데, 그건 맞지 않을 것 같다. 컴파일시 링크해서는 안되는 헤더 파일을 포함하는 것도 의미가 없습니다. 내 코드는 정적 라이브러리를 위해 명확하게 설계되었습니다.

+1

'g ++ -I/usr/include -L/usr/lib64 -lboost_program_options -std = C++ 11 ...' –

+0

서버에'program_options.hpp'가 없을 수도 있습니다. boost_program_options _ ** devel **과 같은 패키지 이름. – Mine

+0

예, 그게 내 문제입니다. 나는 그것 없이는 얻을 수있을 거라 생각했지만, 그럴 것 같지 않습니다. 이제 랩톱에서 프로그램 옵션의 정적 버전에 연결 한 다음 서버에서 실행 파일을 사용하고 있습니다. 그것은 지금까지 일하고있다. 그러나 나는 이것을 서버에서도 컴파일 할 수 있어야한다고 생각한다. 나는 지금 헤더 파일을 다운로드했고 libboost_program_options.so를 찾을 수 없다고 결정했는데, 나는 같은 디렉토리에 심볼릭 링크를 만들었지 만 ... fun ^^ – LuckyM

답변

0

오류 메시지는 오류 메시지에서 설명한대로 부스트 헤더 파일을 찾지 못하는 사전 컴파일러에서 생성됩니다. Boost 라이브러리 헤더 파일이있는 정확한 포함 경로 (-I...)를 설정해야합니다. 분명히 그들은 /usr/include이 아닙니다.

부스트 라이브러리 경로 (-L...)는 그에 따라 지정해야합니다.

마지막으로 : 시스템의 Boost 공유 라이브러리에 링크하는 경우, 서버에 설치된 것과 동일한 버전의 Boost를 사용해야합니다. 그렇지 않으면, 정적 라이브러리에 링크하면 실행 파일이 커질 수 있지만 거기에 설치된 Boost 버전에 관계없이 모든 서버에서 실행됩니다 (심지어는 없음).

+0

그래서 부스트를 사용하려면 프로그램 옵션 헤더 파일과 공유 라이브러리 객체가 필요합니까? 나는 공유 라이브러리 객체가 헤더 파일과 호출하고자하는 함수의 코드를 포함 할 수 있다고 생각했다. 분명히 전에 공유 라이브러리를 사용하지 않았습니다 ... 서버로 전환 할 때 다시 컴파일되지만 내 시스템의 정적 라이브러리에 링크하고 서버에서 실행 파일을 사용하는 것이 좋습니다. 그것은 많은 고통을 덜어 줄 수 있습니다. – LuckyM

+0

고마워, 방금 헤더 파일을 다운로드했고 지금은 조금 더 잘할 수있는 오류가 있습니다. -lboost_program_options을 찾을 수 없습니다. 이상하게도 행복하게 생각하십시오. 그러나 적어도 나는 어딘가 온라인에서 이것을 보았다. – LuckyM

+0

컴파일하려면 헤더 파일과 공유 라이브러리가 모두 필요합니다. 프로그램을 실행하려면 공유 라이브러리 만 필요합니다. 사실, 공유 라이브러리의 심볼이 필요한 경우에만 공유 라이브러리가 필요합니다. Boost 라이브러리의 많은 내용은 헤더에 있으므로 실행 파일에 직접 컴파일됩니다. – Rene

관련 문제