千家信息网

各unix平台动态连接库的编译与使用是怎么样的

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,各unix平台动态连接库的编译与使用是怎么样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。unix平台下,动态连接库的
千家信息网最后更新 2025年02月07日各unix平台动态连接库的编译与使用是怎么样的

各unix平台动态连接库的编译与使用是怎么样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

unix平台下,动态连接库的使用有两种方式,link方式和dlopen方式。需要设置LD_LIBRARY_PATH作为查找路径(低版本AIX使用LIBPATH)。link方式是程序启动时加载所有编译时连接的动态库,直到程序结束也不会关闭。dlopen方式是在运行中按照参数指定的方式加载动态库,并可以使用dlclose函数关闭,直到下次再使用dlopen重新加载。因此,link方式无法做到不重启应用程序而更新动态库版本,dlopen方式可以。

各平台动态连接库的编译参数如下。文件wel.c,编译成libwel.so(HPUX为libwel.sl)。

  • #include


  • void welcome(void)

  • {

  • puts("welcome,baby!");

  • }


linux:
编译libwel.so:
gcc -fPIC -shared -o libwel.so wel.c -lc
-fPIC 用相对地址定位
-shared 生成动态连接库

sco unix open server:
编译libwel.so:
cc -K PIC -G -o libwel.so wel.c -lc
-K PIC 用相对地址定位
-G 生成动态连接库,包含了-b elf选项

AIX:
编译libwel.so:
xlc -G -bnoentry -o libwel.so wel.c -lc
-G 指定生成动态连接库
-bnoentry 动态库无需模块入口(低版本AIX需要此参数)

HP UX:
编译libwel.so:
cc +z -c wel.c
ld -b -o libwel.sl wel.o -lc
+z 用相对地址定位
-b 生成动态连接库

SUN OS: 很类似SCO,man帮助不全面
编译libwel.so:
cc -G -o libwel.so wel.c -lc
-G 生成动态连接库

link方式使用动态连接库的编译参数如下。文件welcome.c,编译成welcome可执行程序。

  • extern void welcome(void);


  • int main(void)

  • {

  • welcome();

  • return 0;

  • }

linux:
gcc -rdynamic -o welcome welcome.c -L. -lwel
-rdynamic 导出所有符号供动态使用

sco unix open server:
cc -b elf -o welcome welcome.c -L. -lwel
-b elf 必须使用ELF的可执行文件格式

AIX:
xlc -bdynamic -brtl -o welcome welcome.c -L. -lwel
-bdynamic 使用动态连接方式,系统默认为此方式
-brtl -l参数使用.so为库

HP UX:
cc -dynamic -o welcome welcome.c -L. -lwel
-dynamic 使用动态连接方式,系统默认为此方式

SUN OS:
编译libwel.so:
cc -B dynamic -o welcome welcome.c -L. -lwel
-B dynamic 使用动态连接方式

dlopen方式,其实就是把打开动态库和查找符号的动作放在程序中执行。因此编译可执行文件与普通的相同,只要连接libdl.so库即可。文件welcome.c,编译成welcome可执行程序。

  • #include


  • int main(void)

  • {

  • void *handle;

  • void (*welcome)(void);


  • handle=dlopen("libwel.so",RTLD_LAZY);

  • welcome=dlsym(handle,"welcome");

  • (*welcome)();

  • return 0;

  • }


linux:
gcc -rdynamic -o welcome welcome.c -ldl
-rdynamic 导出所有符号供动态使用
-ldl 用系统libdl.so库dlopen(),dlsym(),dlerror(),dlclose()

sco unix open server:
cc -b elf -o welcome welcome.c -lc
-b elf 以elf格式,动态连接库必须

AIX:
xlc -bexpall -o welcome welcome.c -ldl -lc
-bexpall 使主程序的符号可以被动态库使用

HP UX:
cc -o welcome welcome.c -ldl -lc

SUN OS:
cc -o welcome welcome.c -ldl -lc


AIX运行动态库时会加载系统内存统一管理,导致即使程序已退出,编译时仍然认为还在使用而无法覆盖。有两个办法,一是root用户执行slibclean,清理系统加载而无人使用的动态库,另一种是编译的库chmod go-rwx,使得组和其他人无权限,这种库系统会认为用户特有而不加载。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

动态 编译 方式 程序 系统 参数 文件 生成 符号 平台 地址 版本 定位 帮助 为此 格式 用户 运行 普通 清楚 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据运维网络安全委员会 方舟手游服务器进不去是什么原因 修改u8凭证纸数据库 j计算机等级考试网络技术 网吧服务器可以用内存吗 深圳市红安网络技术有限公司 网络安全态势感知系统oem 计算机网络技术行业的职业分析 主机名修改会影响数据库吗 网络安全宣传图片封面 佛山哈米互联网科技有限公司 江苏热谅网络技术有限公司 为什么战地五显示EA服务器超时 电信网络安全百度百科 数据库联查的作用 北京西集国家网络安全产业园轻轨 电脑服务器安全验证失败 信息与网络安全会议简报 nba存储数据库 访问文件服务器很慢怎么解决 计算机网络技术类目代码 企业文档管理软件开发报告 朗新科技 工业互联网 美萍酒店管理系统服务器安装 永恒轮回是vac服务器吗 深圳项目售后管理软件开发 乡 镇加强网络安全管理 三维表数据库 徐州云雀网络技术 软件开发报价的计算方法
0