gcc 参数 -ldl 是指什么?如何将OPENSSL的静态库链接进我的PHP扩展

imdemon 2009-03-13 11:54:56
gcc 参数 -ldl 是指什么?如何将OPENSSL的静态库链接进我的PHP扩展

我在
配置的时候加了 /usr/local/lib/libcrypoto.a -ldl 后,编译出来的SO文件有400多K,但是编译出来的这个文件拿到其他的LINUX服务器上作为PHP扩展安装,结果APACHE都启动不了了。

如果我不加这句,编译出来的SO文件只有40K,拿到其他服务器上作为PHP扩展安装后,需要安装OPENSSL,可见是编译后对一定路径的库有依赖。。


我想请问,我如何将OPENSSL的静态库编译进我的SO文件。

...全文
2292 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yutaooo 2009-03-13
  • 打赏
  • 举报
回复

-ldl 指示连接器连接一个库。这个库里包含了 dlopen, dlsym 等等的函数。也就是说,是支持“在运行时,显示加载使用动态连接库”的函数库。相关的头文件是 dlfcn.h


如果准备将 openssl 静态连接进来,这个库是没有帮助的。可以不用的。这个库是为了运行时,显示(通过明确的代码),加载动态库。


看你这个问题,是否应该采用动态库的方式编译你的模块呢?

imdemon 2009-03-13
  • 打赏
  • 举报
回复
已经搞定了~多谢楼上的大哥

我编译的时候用类似下面的这个命令就把静态库编译进来了。只不过PHP扩展生成的Makefile我一开始看不懂,头大。
gcc -o fuck fuck.c /usr/local/lib/libcrypoto.a
yutaooo 2009-03-13
  • 打赏
  • 举报
回复

晕,怎么就结帖了?难道这样就解决了?
yutaooo 2009-03-13
  • 打赏
  • 举报
回复

静态连接库是这样编译的。它是由一个叫 ar 的命令生成的。

1. gcc -c -o XXX.o XXX.c
gcc -c -o YYY.o YYY.c
2. ar -rcs libZZZ.a XXX.o YYY.o
imdemon 2009-03-13
  • 打赏
  • 举报
回复
多谢楼上的大哥。
我想用静态库的方式编译进我的模块。
找了本学习makefile的电子书[url=http://www.shubulo.com/viewthread.php?tid=35380&highlight=makefile][/ur1l]
(给以后看到这帖子需要帮助的朋友)

在Makefile里找到了 -o 链接的部分 然后加上/usr/local/lib/libcrypoto.a 这样似乎成功的把静态库编译进来了。编译出一个400K的SO文件。

这个-ldl 实际上是 -l链接一个名为libdl.a的静态库,对吧?

以前只写过WINDOWS程序,对Makefile不熟悉,惭愧。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧