以下命令有效
g++ file.cpp $( GraphicsMagick++-config --cppflags --cxxflags --ldflags --libs )
但是我想要一个没有链接到库的静态可执行文件,所以我尝试了
g++ file.cpp $( GraphicsMagick++-config --cppflags --cxxflags --ldflags --libs ) -static
但它只会产生以下错误
/usr/bin/ld.bfd.real: /usr/lib/gcc/x86_64-linux-gnu/4.6/crtbeginT.o: relocation R_X86_64_32 against `__DTOR_END__' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.6/crtbeginT.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
添加
-fPIC
可以得到相同的结果。我正在使用Ubuntu 12.04 64位标准存储库随附的GraphicsMagick ++版本。
由于GraphicsMagick ++是ImageMagick的分支,因此ImageMagick的一些旧技巧可能会起作用,但我从未使用过ImageMagick,只有GraphicsMagick ++。
最佳答案
要与该特定库静态链接,请在其前面使用-Wl,-Bstatic
,即:
g++ $( GraphicsMagick++-config --cppflags --cxxflags ) -fPIC file.cpp -o file -Wl,-Bstatic $( GraphicsMagick++-config --ldflags --libs )
如果您随后想要传递更多的库,并针对它们动态链接,则可以传递
-Wl,-Bdynamic
来切换回去,然后再添加更多的库。编辑:还请注意特定的参数顺序。首先是编译器标志,然后是文件,然后是链接器标志和库。使用其他顺序,您可能会遇到随机故障。真。