Windows 8 64 비트 컴퓨터에서 www.mingw.org/에서 다운로드 한 MinGW + MSYS (GCC4.8.1 포함)를 사용하는 다음 라이브러리에 따라 달라지는 C++로 작성된 이미지 처리 프로그램을 빌드하려고합니다.다른 라이브러리를 동적으로 링크 할 때 libgomp를 정적으로 링크하는 방법은 무엇입니까?
나는 성공적으로 (물론 -fopenmp 플래그) 모든 소스 코드 파일을 컴파일LibJPEG
BLAS and LAPACK
Armadillo
OpenMP
후 나는 다음과 같은 문으로 연결 :
g++ -o ./build/rspfitter {a list of .o files} -L{paths to libraries} -ljpeg -lopenblas -lgomp -lpthread
실행 파일이 올바르게 제작되었다. 그러나 다음과 같은 DLL을 요청 : 나는 (위의 세 가지로 내 프로그램을 배포하는 데 필요한 DLL을의 수를 최소화 할 수 있도록
libgomp-1.dll
libpthread-2.dll
pthreadGC2.dll
내가 정적이 더 나은 아이디어가 libgomp 연결할 수있는 생각에서 libpthread dll은 프로그램이 의존하는 유일한 파일은 아닙니다.)
다음d:/mingw/bin/../lib/gcc/mingw32/4.8.1\libgomp.a(env.o):(.text.startup+0xbfe): undefined reference to `_imp__pthread_attr_init'
d:/mingw/bin/../lib/gcc/mingw32/4.8.1\libgomp.a(env.o):(.text.startup+0xc13): undefined reference to `_imp__pthread_attr_setdetachstate'
d:/mingw/bin/../lib/gcc/mingw32/4.8.1\libgomp.a(env.o):(.text.startup+0x3c): undefined reference to `_imp__pthread_attr_setstacksize'
d:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe:
d:/mingw/bin/../lib/gcc/mingw32/4.8.1\libgomp.a(env.o): bad reloc address 0x0 in section `.ctors'
d:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe:
final link failed: Invalid operation
나는 똑같은 컴파일을 실행하기 위해 노력하고 :
g++ -o ./build/rspfitter {a list of .o files} -L{paths to libraries} -ljpeg -lopenblas -Wl,-static -lgomp -lpthread
그러나 다음과 같은 오류 메시지와 함께 실패이 시간 : 그래서 난 단지 libgomp을 연결하고 다음 명령을 사용하여 정적 libpthread가 시도 CodeLite와 함께 설치된 MinGW + GCC 4.8.1 환경을 사용하는 명령 연결. 이것은 다른 오류 메시지와 함께 다시 실패 :
./tmp/hshfitcmdline.o:hshfitcmdline.cpp:(.text.unlikely+0x105): undefined reference to `_Unwind_Resume'
./tmp/hshfitcmdline.o:hshfitcmdline.cpp:(.text$_ZN9NormalMapD1Ev[__ZN9NormalMapD1Ev]+0xb4): undefined reference to `_Unwind_Resume'
d:/mingw-4.8.1/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe:
./tmp/hshfitcmdline.o: bad reloc address 0xb4 in section `.text$_ZN9NormalMapD1Ev[__ZN9NormalMapD1Ev]'
d:/mingw-4.8.1/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe:
final link failed: Invalid operation collect2.exe: error: ld returned
1 exit status make: *** [build/rspfitter] Error 1
내가 파일 "libgomp.a"/ "libgomp.dll.a"는 [는 MinGW 디렉토리] /lib/gcc/mingw32/4.8에 존재하는 것을 확인했다. 1/MinGW의 두 설치. 그러나, 그들은 서로 다른 크기입니다! MinGW.org에서 다운로드 한 설치에서 'libgomp.a'는 86kb이고 "libgomp.dll.a"는 87kb입니다. 그러나 CodeLite 설치에서는 크기가 각각 74kB 및 148Kb입니다. 이제
궁금 :
은 무엇 두는 MinGW 시스템에 의해 주어진 오류 메시지의 원인이 될 수 있을까? MinGW에서 다운로드 한 정적 라이브러리를 평가할 수 있습니까? 그러나 동적 링크는 두 시스템 모두에서 완벽하게 훌륭했습니다.
어떻게하면 libgomp를 정적으로 올바르게 연결할 수 있습니까?
감사
https://stackoverflow.com/questions/23869981/linking-openmp-statically-with-gcc –