为什么不提升构建偏好静态库?

时间:2016-01-22 21:43:15

标签: boost boost.build

我正在使用boost.build。 其中一个步骤jwplayer("myElement").setup({image: preview, sources: [{ file: "http://video6.net/hd1/2829.mp4?st=IxbKO3FEtTPi8Pr0hvufFw&e=1453509476", label: "720p HD", "default": true },{ file: "http://video6.net/sd1/2829.mp4?st=IxbKO3FEtTPi8Pr0hvufFw&e=1453509476", label: "360p SD", "default": false },{ file: "http://video6.net/lq1/2829.mp4?st=IxbKO3FEtTPi8Pr0hvufFw&e=1453509476", label: "240p LQ", "default": false }],width: "100%",aspectratio: "16:9",skin: {url:"/jwplayer/skins/glow.css",name: "glow"},tracks: [{ file: "http://video8.net/timelines/2/8/2829/thumbnails.vtt", kind: "thumbnails" }],startparam: "starttime"}); 我想链接到一个kafka库。 在系统目录中有.so和.a "g++" -o "testbed/bin/gcc-5.3.0/debug/link-static/get_tag34_tag34_processed" -Wl,--start-group "testbed/bin/gcc-5.3.0/debug/link-static/get_tag34_tag34_processed.o" "/usr/local/lib64/librabbitmq.a" "/usr/lib64/libmysqlcppconn-static.a" "/apps/boost/root/bin.v2/libs/date_time/build/gcc-5.3.0/debug/link-static/libboost_date_time.a" -Wl,-Bstatic -lz -lbz2 -Wl,-Bdynamic -Wl,--end-group -g -lSimpleAmqpClient -lcrypto -ldl -lmysqlcppconn -lpthread -lrdkafka -lrdkafka++ -lssl/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/librdkafka++.so。但是它更喜欢.so。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

使用.a文件的完整路径。而不是

-lrdkafka

使用

"/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/librdkafka++.a"

(注意缺少' -l')

或者,删除.so。 :)

这不是boost.build行为,这就是gcc和ld的工作原理:

  

-l namespec   --library = namespec

     

将namespec指定的存档或目标文件添加到要链接的文件列表中。此选项可以使用任意次。如果namespec的格式为:filename,ld将在库路径中搜索名为filename的文件,否则它将在库路径中搜索名为libnamespec.a的文件。   在支持共享库的系统上,ld也可以搜索libnamespec.a以外的文件。具体来说,在ELF和SunOS系统上,在搜索名为libnamespec.a的库之前,ld将在目录中搜索名为libnamespec.so的库。 (按照惯例," .so"扩展名表示共享库。)请注意,此行为不适用于:filename,它始终指定名为filename的文件。

     

链接器将仅在命令行上指定的位置搜索一次存档。如果存档定义了在命令行上存档之前出现的某个对象中未定义的符号,则链接器将包含存档中的相应文件。但是,稍后在命令行中出现的对象中的未定义符号将不会导致链接器再次搜索存档。

     

请参阅 - (用于强制链接器多次搜索存档的方法的选项。

     

您可以在命令行上多次列出相同的存档。

     

这种类型的归档搜索是Unix链接器的标准。但是,如果您在AIX上使用ld,请注意它与AIX链接器的行为不同。