Я пытаюсь создать программу обработки изображений, написанный на C++, которая зависит от следующих библиотек с использованием MinGW + MSYS (с GCC4.8.1), который я скачал с www.mingw.org/ на 64-битном компьютере Windows 8Как связать libgomp статически при динамическом связывании других библиотек?
LibJPEG
BLAS and LAPACK
Armadillo
OpenMP
Я успешно свел все файлы исходного кода (с -fopenmp флагом, конечно), то я связан со следующим утверждением:
g++ -o ./build/rspfitter {a list of .o files} -L{paths to libraries} -ljpeg -lopenblas -lgomp -lpthread
Исполняемыми правильно произведен. Тем не менее, он просит следующие библиотеки DLL:
libgomp-1.dll
libpthread-2.dll
pthreadGC2.dll
Я думаю, что это, возможно, лучшая идея связать libgomp и libpthread статический, так что я могу свести к минимуму числа библиотек DLL, мне нужно, чтобы развернуть свою программу (выше три dll не являются единственными, от которых зависит программа). Поэтому я попытался связать только libgomp и libpthread статический с помощью следующей команды:
g++ -o ./build/rspfitter {a list of .o files} -L{paths to libraries} -ljpeg -lopenblas -Wl,-static -lgomp -lpthread
Но на этот раз он терпит неудачу со следующим сообщением об ошибке:
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
Затем я попытался выполнить ту же самую компиляцию и связывая команды с использованием среды MinGW + GCC 4.8.1, которая была установлена вместе с CodeLite. Он снова терпит неудачу с различными сообщениями об ошибках:
./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-static-with-gcc –