忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 7091 | 回复: 3

[SCO UNIX] 在 SCO 系统的 CC 编译器上强制使用静态链接库或者是动态链接库。 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2011-11-26 10:10 |显示全部楼层
实验如下:

同时编写三个源码文件

hello.c
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. int main ( void )
  5. {
  6.         hello1();
  7.         hello2();
  8.         return 0;
  9. }
复制代码
hello1.c
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void hello1()
  4. {
  5.        printf("hello , i am hello1\n");
  6.        return;
  7. }
复制代码
hello2.c
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void hello2()
  4. {
  5.        printf("hello , i am hello2\n");
  6.        return;
  7. }
复制代码
先将 hello1.c 和 hello2.c 编译成动态链接库 libhello.so
再将 hello1.c 和 hello2.c 编译成静态链接库 libhello.a

如何编译成动态库和静态库,请搜索论坛 sco 版块,记得 sunlan 老大曾发过一个帖子,不再重复叙述。

下面是关键的一步。

我们首先看看:

cc -o hello hello.o -L. -lhello

编译会生成一个 hello 的可执行文件,我们执行一下看看,咦,咋提示找不到动态链接库 libhello.so ?

进行如下操作:

LD_LIBRARY_PATH=${LIBRARY_PATH}:/usr/work/src/test/
export LD_LIBRARY_PATH

再执行一下看看? ./hello

OK , 程序顺利的打出两行。

由此可见,前面的编译操作链接的是动态链接库 libhello.so

我们再来执行编译操作
cc -dn -o hello hello.o -L. -lhello
编译同样会生成一个 hello 的可执行文件。

清除 LD_LIBRARY_PATH 环境变量
unset LD_LIBRARY_PATH

set 一下看看,我们发现环境变量 LD_LIBRARY_PATH 已经被清除了。

再次执行一下看看 ./hello
程序顺利打出两行信息。

总结:
在默认情况下,cc 编译成可执行文件的时候,如果在 -L 指向的路径下同时存在动态链接库和静态链接库,系统默认链接的是动态链接库。
cc -o hello hello.o -L. -lhello 相当于是 cc -dy -o hello hello.o -L. -lhello

如果强制编译器链接静态库,应使用 -dn 的参数
cc -dn -o hello hello.o -L. -lhello

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2011-11-26 10:25 |显示全部楼层
顺便说一下,如果是使用的 gcc 编译器,那么对应的编译参数是

-shared 和 -static

切记,切记!

论坛徽章:
0
发表于 2011-12-02 16:11 |显示全部楼层
另外还要注意-b参数。在默认情况下,cc生成的目标代码是coff格式的,加-belf时,生成的目标代码是elf格式的。而gcc缺省生成的是elf格式的。两种格式不能兼容

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2011-12-03 00:51 |显示全部楼层
另外还要注意-b参数。在默认情况下,cc生成的目标代码是coff格式的,加-belf时,生成的目标代码是elf格式的 ...
sunlan 发表于 2011-12-02 16:11



    嗯,这个还真实忽略了。

谢谢补充。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP