Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux上GraphicsMagick++与ClangLibc++的链接_C++_Linux_Linker_Clang_Graphicsmagick - Fatal编程技术网

Linux上GraphicsMagick++与ClangLibc++的链接

Linux上GraphicsMagick++与ClangLibc++的链接,c++,linux,linker,clang,graphicsmagick,C++,Linux,Linker,Clang,Graphicsmagick,我正试图在Ubuntu 12.04 x64上编译一个应用程序。 它是基于osx和Clang3.2构建的,使用新的c++11标准,并且依赖于boost和GraphicsMagick++并运行良好。 使用GCC4.8.1编译时产生编译器崩溃。不幸的是,我们必须尽快发布软件,不能等待gcc修复错误 在linux上使用clang进行了一些尝试和错误,并阅读了一些邮件列表后,我根据这篇文章用clang 3.3、libc++和libc++abi编译了它。所有仅与boost头和共享对象lib相关的单元测试都执

我正试图在Ubuntu 12.04 x64上编译一个应用程序。 它是基于osx和Clang3.2构建的,使用新的c++11标准,并且依赖于boost和GraphicsMagick++并运行良好。 使用GCC4.8.1编译时产生编译器崩溃。不幸的是,我们必须尽快发布软件,不能等待gcc修复错误

在linux上使用clang进行了一些尝试和错误,并阅读了一些邮件列表后,我根据这篇文章用clang 3.3、libc++和libc++abi编译了它。所有仅与boost头和共享对象lib相关的单元测试都执行得很好。 在我们开始链接GraphicsMagick++之后,会导致下面未定义的引用错误

"/usr/bin/ld" -export-dynamic -z relro --hash-style=gnu --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o ../test_xxx_import /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/4.8/crtbegin.o -L/usr/local/lib/ -L/usr/lib/gcc/x86_64-linux-gnu/4.8 -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../.. -L/lib -L/usr/lib -lc++ -lc++abi CMakeFiles/test_xxx_import.dir/xxx_http_binding_test.cpp.o CMakeFiles/test_xxx_import.dir/resource_test.cpp.o CMakeFiles/test_xxx_import.dir/slugify_test.cpp.o CMakeFiles/test_xxx_import.dir/product_test.cpp.o CMakeFiles/test_xxx_import.dir/field_semantic_test.cpp.o CMakeFiles/test_xxx_import.dir/files.index-parser_test.cpp.o CMakeFiles/test_xxx_import.dir/thread_pool_test.cpp.o CMakeFiles/test_xxx_import.dir/container_sink_test.cpp.o CMakeFiles/test_xxx_import.dir/factories_test.cpp.o CMakeFiles/test_xxx_import.dir/thread_safe_queue_test.cpp.o CMakeFiles/test_xxx_import.dir/container_device_test.cpp.o CMakeFiles/test_xxx_import.dir/product_catalog_test.cpp.o CMakeFiles/test_xxx_import.dir/config_object_test.cpp.o CMakeFiles/test_xxx_import.dir/sha1_test.cpp.o CMakeFiles/test_xxx_import.dir/resize_test.cpp.o CMakeFiles/test_xxx_import.dir/redis_connection_test.cpp.o CMakeFiles/test_xxx_import.dir/redis_util_test.cpp.o CMakeFiles/test_xxx_import.dir/redis_product_test.cpp.o CMakeFiles/test_xxx_import.dir/redis_string_util_test.cpp.o CMakeFiles/test_xxx_import.dir/redis_task_queue_test.cpp.o CMakeFiles/test_xxx_import.dir/stream_manipulator_test.cpp.o CMakeFiles/test_xxx_import.dir/category_info_test.cpp.o CMakeFiles/test_xxx_import.dir/localized_string_test.cpp.o CMakeFiles/test_xxx_import.dir/product_description_test.cpp.o CMakeFiles/test_xxx_import.dir/product_picture_test.cpp.o CMakeFiles/test_xxx_import.dir/product_relation_test.cpp.o CMakeFiles/test_xxx_import.dir/supplier_test.cpp.o CMakeFiles/test_xxx_import.dir/summary_description_test.cpp.o CMakeFiles/test_xxx_import.dir/summary_descriptions_test.cpp.o CMakeFiles/test_xxx_import.dir/stage_base_test.cpp.o CMakeFiles/test_xxx_import.dir/thread_reclaimer_test.cpp.o CMakeFiles/test_xxx_import.dir/product_sheet_download_test.cpp.o CMakeFiles/test_xxx_import.dir/image_scaling_test.cpp.o CMakeFiles/test_xxx_import.dir/image_download_test.cpp.o CMakeFiles/test_xxx_import.dir/product_data_sheet_parser_test.cpp.o ../libxxx_import.a /usr/local/lib/libboost_unit_test_framework.a /usr/local/lib/libboost_thread.a /usr/local/lib/libboost_date_time.a /usr/local/lib/libGraphicsMagick++.a /usr/local/lib/libboost_filesystem.a /usr/local/lib/libboost_system.a /usr/local/lib/libboost_exception.a /usr/local/lib/libboost_chrono.a /usr/local/lib/libboost_log.a /usr/local/lib/libPocoNet.so /usr/local/lib/libPocoFoundation.so /usr/local/lib/libPocoNetSSL.so /usr/local/lib/libPocoUtil.so -Bstatic -lexpat -lhiredis -Bdynamic /usr/local/lib/libboost_date_time.a /usr/local/lib/libGraphicsMagick++.a -rpath /usr/local/lib -lc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/4.8/crtend.o /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crtn.o
/usr/local/lib/libGraphicsMagick++.a(Image.o): In function `Magick::Image::signature(bool) const':
/home/xxx_import/temp/GraphicsMagick-1.3.18/Magick++/lib/Image.cpp:3271: undefined reference to `GetImageAttribute'
/home/xxx_import/temp/GraphicsMagick-1.3.18/Magick++/lib/Image.cpp:3274: undefined reference to `SignatureImage'
/home/xxx_import/temp/GraphicsMagick-1.3.18/Magick++/lib/Image.cpp:3278: undefined reference to `GetImageAttribute'
/usr/local/lib/libGraphicsMagick++.a(Image.o): In function `Magick::Image::read(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)':
然后建造和安装

手动查找符号时发现符号未定义:

nm /usr/local/lib/libGraphicsMagick++.a | grep GetImageAttribute
                 U GetImageAttribute
属性位于/usr/local/lib/libGraphicsMagick.a中

我的ldd输出如下所示:

ldd /usr/local/lib/libGraphicsMagick++.so
linux-vdso.so.1 =>  (0x00007fff78592000)
libGraphicsMagick.so.3 => /usr/local/lib/libGraphicsMagick.so.3 (0x00007fd0b0309000)
libjpeg.so.8 => /usr/lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007fd0b00b0000)
libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007fd0afe87000)
libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007fd0afc77000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fd0afa60000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd0af842000)
libc++abi.so.1 => /usr/local/lib/libc++abi.so.1 (0x00007fd0af5f5000)
libc++.so.1 => /usr/local/lib/libc++.so.1 (0x00007fd0af351000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd0af054000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd0aec95000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd0aea7f000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd0b09c3000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fd0ae876000)
它链接到gcc工具链中的一些C库。我应该用叮当声来建造它们吗?
欢迎您提出任何建议。

您是否也明确链接到GraphicsMagick++的依赖项?如果将GraphicsMagick++的所有依赖项都列举为生成的可执行文件的依赖项,我认为这可能会解决您的问题,因此也可以链接这些库:

-lGraphicsMagick -ljpeg -lpng12 -lbz2 -lz

查看链接错误是否减少。

也许解决编译器崩溃比切换到其他工具链更容易。也许回到gcc-4.7系列更容易。无论如何,您应该在源代码中搜索GetImageAttribute定义,确保它是在.o/.a/.so文件上使用nm编译的,然后确保这些对象位于链接器命令行中引用它们的对象之后。我尝试了它,并在/usr/local/lib/libGraphicsMagick.a中找到了符号。正如答案所描述的,我必须明确链接到GraphicsMagick和所有依赖项。这就像一个符咒。非常感谢。仍然不知道为什么它们会自动链接到OSX上。
-lGraphicsMagick -ljpeg -lpng12 -lbz2 -lz