c++ - 使用 g++ 编译并将 GraphicsMagick++ 作为静态库

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

最佳答案

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

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

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

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

关于c++ - 使用 g++ 编译并将 GraphicsMagick++ 作为静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11925721/

相关文章:

bash - 使用 imagemagick 如何将图像分割成多个单独的图像?

c++ - 当文件相互依赖时,如何使用 g++ 将多个 cpp 文件编译成单个可执行文件?

ImageMagick:使用最大文件大小缩放 JPEG 图像

c++ - 对大数进行加法运算

c++ - C++11 中的 move 语义

c++ - 缺少 OpenSSL libcrypto-1_1-x64.dll

C++ GNU 链接器错误

pdf - 使用 Imagemagick 在 PDF 中居中 .jpg 图像?

c++ - 实现常量。石头、剪刀、布

c++ - 数组大小错误