使用g ++进行编译并将GraphicsMagick ++作为静态库进行编译

时间:2012-08-12 20:39:32

标签: c++ g++ imagemagick static-libraries static-linking

以下命令有效

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 ++。

1 个答案:

答案 0 :(得分:0)

要静态链接该特定库,请在之前使用-Wl,-Bstatic ,即:

g++ $( GraphicsMagick++-config --cppflags --cxxflags ) -fPIC file.cpp -o file -Wl,-Bstatic $( GraphicsMagick++-config --ldflags --libs )

如果您想传递更多库,并动态链接它们,您可以通过-Wl,-Bdynamic切换回来并在之后添加更多库。

编辑:还要注意具体的参数顺序。首先是编译器标志,然后是文件,最后是链接器标志和库。使用其他订单,您可能会遇到随机故障。真。