免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2438 | 回复: 14
打印 上一主题 下一主题

请高手解释一下下面这个是如何编译的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-02-27 15:30 |只看该作者 |倒序浏览
$(CC) -o server server.o -Bdynamic -L$(TEST_LIB) -lrsa -lJLib -lJLibBase -lsocket -lc

尤其是-Bdynamic,我不明白

论坛徽章:
0
2 [报告]
发表于 2003-02-27 15:41 |只看该作者

请高手解释一下下面这个是如何编译的

man cc

论坛徽章:
0
3 [报告]
发表于 2003-02-27 15:43 |只看该作者

请高手解释一下下面这个是如何编译的

看了,不太明白

论坛徽章:
0
4 [报告]
发表于 2003-02-27 15:48 |只看该作者

请高手解释一下下面这个是如何编译的

-Bdynamic应该是动态库之类的吧,如果你的系统支持动态连接的话

论坛徽章:
0
5 [报告]
发表于 2003-02-27 15:56 |只看该作者

请高手解释一下下面这个是如何编译的

man 上的表述如下,请大家帮翻译一下
-B style
          Control the linking phase library name search mechanism for subsequent -l options. This option is passed to ld in the linking phase. The option argument style can be one of dynamic (the fault
setting), static, or symbolic, all in lower case. The order of the -B, -L, and -l options is significant in controlling which library is linked. See ld(CP) man page for further details.
          This option implies -b elf and cannot be used with -b coff.

我是在看别人的程序,这个程序当中用到了两个.so动态库,可在程序编码中并没有使用类似与windows下的函数倒出的东西,我想可能是在编译的时候用-Bdynamic指定的,因此想知道-B的具体用法,请高手指点

论坛徽章:
0
6 [报告]
发表于 2003-02-27 16:30 |只看该作者

请高手解释一下下面这个是如何编译的

使用这个参数应该是在同时连接共享库和静态库时候使用的
参考以下
★5.5.4 共享(shared)库和静态(static)库的混合连接

默认情况下,假如共享库可用,连接器会使用共享库。但是-Bdynamic和
-Bstatic提供了很好控制库的方法。它们可以决定用共享库还是用静态库。

传-Bdynamic和-Bstatic选项给连接器,如下操作:
# gcc -o main main.o -Wl,-Bstatic \
        -lfoo -Wl,-Bdynamic -lbar

# gcc -o main main.o -Wl,-Bstatic
告诉连接器所有的库(象libc等等)都使用静态的版本。

论坛徽章:
0
7 [报告]
发表于 2003-02-27 16:51 |只看该作者

请高手解释一下下面这个是如何编译的

还是不太明白,是不是这个意思
-Bdynamic表示其后面的连接库使用共享库,如果没有相应的共享库,就使用相应的静态库,如果没有-Bdynamic,则先查找静态库,后查找共享库即如果有下面的编译命令:
cc -o server server.o -Bdynamic -lJLibBase -lsocket
则连接器先找libJlibBase.so和libsocket.so,如果没有的话,则连接libJlibBase.a和libsocket.a

对不对

论坛徽章:
0
8 [报告]
发表于 2003-02-27 16:58 |只看该作者

请高手解释一下下面这个是如何编译的


应该是这样

论坛徽章:
0
9 [报告]
发表于 2003-02-27 17:08 |只看该作者

请高手解释一下下面这个是如何编译的

看下面的例子:
$(CC) -o server server.o -Bdynamic -L$(TEST_LIB) -lrsa -lJLib -lJLibBase -lsocket -lc

在这里用到的库为librsa.a,libJLib.so,libJLibBase.so,libsocket.a,libc.a
$TEST_LIB=../lib

librsa.a,libJLib.so,libJLibBase.so均在../lib中
由于加不加-Bdynamic只是查找共享库和静态库的先后问题,按理说应该可以通过的,可为什么编译无法通过

请无双指教

论坛徽章:
0
10 [报告]
发表于 2003-02-28 08:48 |只看该作者

请高手解释一下下面这个是如何编译的

-Bdynamic 表示都使用动态库连接
gcc -o main main.o -Wl,-Bstatic \
-lfoo -Wl,-Bdynamic -lbar

表示对foo 使用静态连接
对bar 使用动态连接


上面的回答错了
cc -o server server.o -Bdynamic -lJLibBase -lsocket
则连接器先找libJlibBase.so和libsocket.so,如果没有的话,则连接libJlibBase.a和libsocket.a
应该是如果没有的话
则报错
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP