2010-06-17 7 views
2

소켓 용으로 Boost :: Asio를 사용하는이 프로그램이 있습니다. 나는 Boost 예제에서 약간의 코드를 변경했다. 이 프로그램은 VS에서 Windows와 마찬가지로 컴파일되고 실행됩니다. 그러나 Linux에서 프로그램을 컴파일하고 실행하면 Segmentation 오류가 발생합니다. 이유는 다음 라인에부스트 프로그램이 리눅스에서 작동하지 않습니다

c++ -I/appl/htopopt/Linux_x86_64/NTL-5.4.2/include 
-I/appl/htopopt/Linux_x86_64/boost_1_43_0/include 
mpqs.cpp mpqs_polynomial.cpp mpqs_host.cpp -o mpqs_host 
-L/appl/htopopt/Linux_x86_64/NTL-5.4.2/lib -lntl 
-L/appl/htopopt/Linux_x86_64/gmp-4.2.1/lib -lgmp -lm 
-L/appl/htopopt/Linux_x86_64/boost_1_43_0/lib -lboost_system 
-lboost_thread -static -lpthread 

코드를 주석으로, 나는 내가 분할 오류를 얻을 것을 발견 : 나는 코드 here

내가 그것을 컴파일하는 데 사용하는 명령을 게시

이있다 :

boost::asio::io_service io_service; 

누구든지 문제 (및 해결책)에 대해 도움을 줄 수 있습니까?

감사합니다.

편집 : 그러나이 나는 또한 다른 라이브러리 포함 및 편집에 연결을 제거

#define DEBUG 0 

#include <boost/asio.hpp> 

int main(int argc, char* argv[]) { 
    boost::asio::io_service io_service; 
    return 0; 
} 

: 나는 최소한의 예에 프로그램을 변경하는 다른 라이브러리 나 헤더를 사용하지 않는 시도, 단지/asio.hpp을 향상 최소한의 예는 나에게 여전히 세분화 오류를 준다. -static 옵션의 GCC 온라인 문서에서

+0

이 질문에 대한 답변이 의심 스럽지만 리눅스에서 금형 링커와 부스트를 사용하는 것과 같은 큰 문제가있었습니다. 이전의 ld 링커로 다시 전환하면 모든 문제가 해결되었습니다. – McBeth

+0

어떤 컴파일러 및 Linux OS를 사용하고 있습니까? 최소한의 예제 만 여전히 segfaults라면, 나는 당신의 환경을 살펴보기 시작할 것입니다. –

답변

4

: 동적 링크를 지원하는 시스템에

, 이것은 공유 라이브러리와 링크 방지 할 수 있습니다.

부스터는 OS 패키지 관리자가 빌드했을 때와 같이 구성된 경우에만 정적 전용 링크를 지원할 수 있습니다. 이 깃발을 사용해야한다는 것이 확실합니까? 그렇지 않으면 플래그없이 다시 컴파일하여 문제가 해결되지 않는지 확인하십시오.

+1

테스트 프로그램이 컴파일되고 제 fedora12 상자에서 잘 실행되는 '-static'이 없으면 문제가 될 수 있습니다. 내가 기억한다면, 너는 pthreads를 필요로하는 것을 정적으로 컴파일 할 수 없을지도 모른다. – zdav

관련 문제