나는 Windows에서 Linux로 이식 된 응용 프로그램을 가지고 있지만, 모든 것이 잘되었지만 ... 우리 고객은 데비안 3.1 (sarge)에서 실행중인 응용 프로그램을 강제 실행 할 수 없습니다. 시스템과 나는 새로운 gcc를 사용하는 것을 선호한다. (내가 보존하고 싶은 몇몇 C++ 11 구조가있다.) 앞으로 테스트 및 .so 파일을 위해 실행 파일을 만들고 싶습니다.전체 프로그램을 정적으로 링크
나는 procect를 정적으로 컴파일하기로 결정했다.
나는 실행하면g++ -static -o prog obj/sublib1/file1.o obj/sublib1/file2.o obj/sublib2/file1.o obj/sublib2/file2.o (...) -L../somedir -s -lsomestaticlib
내가 오류 ko를 얻을 :
Linux linux-zfaz.site 3.11.6-4-desktop #1 SMP PREEMPT Wed Oct 30 18:04:56 UTC 2013 (e6d4a27) i686 i686 i386 GNU/Linux
이 문제는 함께 아마도 :
/usr/lib/gcc/i586-suse-linux/4.8/../../../../i586-suse-linux/bin/ld: cannot find -lm
/usr/lib/gcc/i586-suse-linux/4.8/../../../../i586-suse-linux/bin/ld: cannot find -lc
시스템은 오픈 수세 13.1 32 비트, 끝나면 uname -a입니다 수학 라이브러리 및 C 라이브러리 두 라이브러리의 동적 버전은/lib 디렉토리에 있습니다.
(아마 문제가되지 않습니다 내가 코드 :: 블록을 사용하여 구축을 위해 노력하지만, 한 문제는 내가 터미널로 이동했습니다 발생했을 때)
나는이 라이브러리의 정적 버전을 설치해야합니까? 방법?
이 해결책은 오래된 데비안에서 오류가 발생합니다.'./prog : /lib/libgcc_s.so.1 : version 'GCC_4.2.0'not found (./sarmata_C++ 필요)'. '-static-libstdC++'와'-static-libgcc' 둘 다 사용합니다 :'./prog : 재배치 오류 : ./prog : undefined symbol : _ZNSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE' – entro
당신은 적어도 -static_libgcc를 원하지 않을 것입니다. 리눅스 시스템 (아마도 아무 데나). 다양한 역사적 이유 때문에, 내가 틀리지 않는다면,'libgcc'는 전통적인'libc '도 포함합니다. 이것은 정적으로 링크되어서는 안됩니다. 나머지에 관해서는, 나는 또한 버전 관리에 문제가있었습니다; 나는 g ++과 libstdC++가 설치된 방식과 관련이 있다고 생각하지만, 후속 작업을하고 알아낼 기회가 없었습니다. ('-static-libstdC++'에 대한 지원은 매우 최근 버전이므로, g ++/libstdC++의 이전 버전은 지원하지 않을 수도 있고 올바르게 지원하지 않을 수도 있습니다.) –