当前位置:  编程技术>其它
本页文章导读:
    ▪指定使用静态库       Linux动态链接库的问题_静态库、动态链接库同时存在时,gcc/g++默认用动态库,参数-WI,-Bstatic指定使用静态库,参数-WI,-Bdynamic指定使用动态库\编译OK,运行找不到的问题_解决-WI,rlibpathname &.........
    ▪VC++ 6.0 生成dll 和 对应lib的方法 转载并修改      方法一 新建一个Console application   建立两个文件 dll.h 和 dll.cpp  dll.h ================     int add(int ,int);dll.cpp 在函数前面 extern "C" __declspec(dllexport) ========.........
    ▪linux下so动态库一些不为人知的秘密(中) 2       继续上一篇《 linux下so动态库一些不为人知的秘密(中) 》介绍so搜索路径,还有一个类似于-path,叫LD_RUN_PATH环境变量, 它也是把路径编译进可执行文件内,不同的是它只设置RPATH。 [steve.........

[1]指定使用静态库
    来源:    发布时间: 2013-11-15
Linux动态链接库的问题_静态库、动态链接库同时存在时,gcc/g++默认用动态库,参数-WI,-Bstatic指定使用静态库,参数-WI,-Bdynamic指定使用动态库\编译OK,运行找不到的问题_解决-WI,rlibpathname  

2011-03-11 14:30:23|  分类: Linux系统编程|字号 订阅

1、在Linux下,动态库和静态库同事存在时,gcc/g++的链接程序,默认链接的动态库。

                 可以使用下面的方法,给连接器传递参数,看是否链接动态库还是静态库。

          

                -WI,-Bstatic             -llibname                                   //指定让gcc/g++链接静态库

使用:

                gcc/g++   test.c -o test      -WI,-Bstatic     -llibname

         

              -WI,-Bdynamic       -llibname                                    //指定让gcc/g++链接动态库

使用:

               gcc/g++   test.c -o test    -WI,-Bdynamic        -llibname

 

               如果要完全静态加在,使用-static参数,即将所有的库以静态的方式链入可执行程序,这样生成的可执行程序,不再依赖任何库,同事出现的问题是,这样编译出来的程序非常大,占用空间。

 

         

 

2、Linux下动态库为什么会出现编译OK,运行时找不到的情况。


    
[2]VC++ 6.0 生成dll 和 对应lib的方法 转载并修改
    来源:    发布时间: 2013-11-15
方法一
 新建一个Console application
   建立两个文件 dll.h 和 dll.cpp
  dll.h
 ================
     int add(int ,int);

dll.cpp
在函数前面 extern "C" __declspec(dllexport)
 =================

extern "C" __declspec(dllexport)
int add(int x,int y)
{
   return x+y;
}

在project=》setting=》link 最下面的 project options中 最后 添加 /dll

方法二
  使用def文件
新建一个Console application
   建立两个文件 dll.h 和 dll.cpp
  dll.h
 ================
     int add(int ,int);

dll.cpp 
=================
int add(int x,int y)
{
   return x+y;
}

建立一个def文件
内容为:
LIBRARY (可能不需要)
EXPORTS
add

在project=》setting=》link 最下面的 project options中 最后 添加 /dll




谢丛文 2013-01-04 16:23 发表评论

    
[3]linux下so动态库一些不为人知的秘密(中) 2
    来源:    发布时间: 2013-11-15
 继续上一篇《 linux下so动态库一些不为人知的秘密(中) 》介绍so搜索路径,还有一个类似于-path,叫LD_RUN_PATH环境变量, 它也是把路径编译进可执行文件内,不同的是它只设置RPATH。
[stevenrao] $ g++ -o demo -L /tmp/ -ltmp main.cpp
[stevenrao] $ readelf -d demo
Dynamic section at offset 0xb98 contains 25 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libtmp.so]
....
0x000000000000000f (RPATH) Library rpath: [/tmp/]

另外还可以通过配置/etc/ld.so.conf,在其中加入一行
/tmp/
这个配置项也是只对运行期有效,并且是全局用户都生效,需要root权限修改,修改完后需要使用命令ldconfig 将 /etc/ld.so.conf 加载到ld.so.cache中,避免重启系统就可以立即生效。
除了前面介绍的那些搜索路径外,还有缺省搜索路径/usr/lib/ /lib/ 目录,可以通过-z nodefaultlib编译选项禁止搜索缺省路径。
[stevenrao] $ g++ -o demo -z nodefaultlib -L/tmp -ltmp main.cpp
[stevenrao] $ ./demo
./demo: error while loading shared libraries: libstdc++.so.6: cannot open shared object file

这么多搜索路径,他们有个先后顺序如下
1、RUMPATH 优先级最高
2、RPATH 其次
3、LD_LIBRARY_PATH
4、/etc/ld.so.cache
5、/usr/lib/ /lib/

查看一个程序搜索其各个动态库另一个简单的办法是使用 LD_DEBUG这个环境变量;
[stevenrao] $ export LD_DEBUG=libs
[stevenrao] $ ./demo
下一篇介绍动态库内符号问题


tqsheng 2013-01-04 16:59 发表评论

    
最新技术文章:
▪修改月光博客网站中PHP常用正则表达式中出现...
▪js正则判断非法字符限制输入
▪通过正则表达式删除空行的方法
▪一个好用的正则匹配电话号手机号邮箱网址的...
▪JS 正则表达式用法介绍
▪几个小例子教你如何实现正则表达式highlight高...
▪如何实现正则表达式的JavaScript的代码高亮
▪js 玩转正则表达式之语法高亮
▪PHP中过滤常用标签的正则表达式
▪js 正则表达式学习笔记之匹配字符串
▪使用正则表达式匹配[***]样式的字符串
▪史上最详细的js日期正则表达式分享
▪php+正则将字符串中的字母数字和中文分割
▪正则表达式不区分大小写以及解决思路的探索...
▪正则替换换行符和把 br 替换成换行符
▪正则表达式匹配不包含某些字符串的技巧
▪匹配form表单中所有内容的正则表达式
▪正则表达式(括号)、[中括号]、{大括号}的区别...
▪正则表达式中的"g"是什么意思附件参数g的用...
▪浅谈正则表达式(Regular Expression)
▪Python正则表达式的七个使用范例详解
▪正则表达式提取img的src
▪常用的正则表达式集锦
▪使用正则表达式找出不包含特定字符串的条目...
java开发知识 iis7站长之家
▪正则表达式概述 什么是正则表达式 .
▪ajax对注册名进行验证检测是否存在于数据库...
▪js正则解析URL参数示例代码
▪JS使用正则去除字符串最后的逗号
▪几种常见攻击的正则表达式
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3