首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 编译参数中,-ldl和-lpthread 是什么意思? [已结贴,结贴人:sunote]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sunote
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-08-19 16:44:20 楼主
    如题。

    对于-lpthread
    我在《Using the GNU Compiler Collection》gcc 4.30 中关于-lpthread的描述如下:

    -pthread      Add support for multithreading using the POSIX threads library. This option
              sets flags for both the preprocessor and linker. It does not affect the thread
                safety of object code produced by the compiler or that of libraries supplied with
                  it. These are HP-UX specific flags.
               
    但是关于-ldl的都没有看到,希望有人解释一下。

    谢谢!
    30  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sunote
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-19 16:51:281楼 得分:0
    还有,我编译的是sqlite3最新的程序,我的系统是centos 5.2。

    貌似不用这两参数,最后也编译成功了。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cceczjxy
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 6

      2

    发表于:2008-08-19 17:12:462楼 得分:5
    #include <dlfcn.h>

      dlopen(),dlclose() , dlerror() , dlsym() , the Base Definitions volume of IEEE Std 1003.1-2001, <dlfcn.h>


    这些函数,动态库的相关部分
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • NC
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-19 17:19:353楼 得分:5
    -dl ,同楼上所说,是显式加载动态库的动态函数库。~~~真TM绕口。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sunote
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-19 17:35:344楼 得分:0
    那我编译的时候,如果没有添加-ldl,是不是我的动态库就不能被加载呢?因为我编译也成功了。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • smilefox
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-19 17:42:065楼 得分:5
    引用 4 楼 sunote 的回复:
    那我编译的时候,如果没有添加-ldl,是不是我的动态库就不能被加载呢?因为我编译也成功了。。


    因为sqlite没有用到 libdl.so中的相关函数
    如果你用到 这些 dlopen(),dlclose() , dlerror() , dlsym() ,就要编译时链接libdl.so
    同理 如果用到 pthread相关的函数接口,也要连接 pthread的so
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wlabing
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-19 18:30:306楼 得分:10
    引用 1 楼 sunote 的回复:
    还有,我编译的是sqlite3最新的程序,我的系统是centos 5.2。

    貌似不用这两参数,最后也编译成功了。。

    sqlite它本身应该是不需要它自己老版本的库啦。
    sqlite可能是没用到线程。不知道你是怎么编译的?也可能用到了线程的相关函数,用auto tools完成编译,可以在makefile文件中就加入进出了,而你没看到.

    引用 5 楼 smilefox 的回复:
    引用 4 楼 sunote 的回复:
    那我编译的时候,如果没有添加-ldl,是不是我的动态库就不能被加载呢?因为我编译也成功了。。


    因为sqlite没有用到 libdl.so中的相关函数
    如果你用到 这些 dlopen(),dlclose() , dlerror() , dlsym() ,就要编译时链接libdl.so
    同理 如果用到 pthread相关的函数接口,也要连接 pthread的so


    同楼上所述
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FreeElf
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-19 19:37:497楼 得分:5
    引用 2 楼 cceczjxy 的回复:
    #include  <dlfcn.h>

    dlopen(),dlclose() , dlerror() , dlsym() , the Base Definitions volume of IEEE Std 1003.1-2001,  <dlfcn.h>


    这些函数,动态库的相关部分


    学习下
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved