当前位置:  技术问答>linux和unix

gcc动态链接库的问题

    来源: 互联网  发布时间:2016-07-10

    本文导语:  我想写一个动态链接库, 有2个要求: 1,所有调用到gcc动态库部分的,都要静态编译进来,   因为目标系统上没有这些动态库,比如libstdc++.so等   感觉特想windows上把MFC静态还是动态编译进来一样-..- 2,导出其中的2个函数(传...

我想写一个动态链接库,
有2个要求:
1,所有调用到gcc动态库部分的,都要静态编译进来,
  因为目标系统上没有这些动态库,比如libstdc++.so等
  感觉特想windows上把MFC静态还是动态编译进来一样-..-
2,导出其中的2个函数(传闻linux下面动态库默认导出所有符号)

比如代码是 ,要生成 

谢谢各位大侠鼎力相助~

|
g++ -fpic -Wl,-shared -Wl,-static -lstdc++ -static-libgcc -o libX.so tlib.o

|

这个是当然的, gcc/g++ 的-shared 和 -static参数本来就是传给ld的。
俺要说的是,-shared和-static没有直接冲突,但是在某些平台上,由于-fpic/-fPIC参数的原因,
-shared和-static实际上可能是冲突的(比如FreeBSD 7.2 amd64)。
所以ld会报类似下面的错误
/usr/bin/ld: /usr/lib/crt1.o: relocation R_X86_64_32 can not be used when making a shared object; recompile with -fPIC

俺当然也清楚,如果在编译静态库的时候也用了-fPIC参数,或者说由于硬件体系的指令本来就是PIC的,也是能链接成功的(比如在我使用的fedora上 2.6.27.10 内核)

|
2,导出其中的2个函数(传闻linux下面动态库默认导出所有符号) 
http://blog.pfan.cn/miaowei/45071.html


|
1
参看

http://www.blogjava.net/davidgw/archive/2009/01/21/252230.html

|
gcc -static

       -static
           On systems that support dynamic linking, this prevents linking with
           the shared libraries.  On other systems, this option has no effect.

|

-shared 指定的是输出文件的格式,-static指定的是输入库的格式。
所以-shared和-static没有直接冲突
但是,在某些平台上-shared需要所有的.o是用-fpic或者-fPIC编译
不能保证所有的.a文件里的.o都用-fpic/-fPIC编译

    
 
 

您可能感兴趣的文章:

  • Linux下gcc编译时,如何以静态链接的形式编译?
  • 太奇怪了,正在开发bootloader,gcc难道有内置的string的处理函数链接到我的程序中了?我根本没有链接C库啊。
  • 有关gcc的链接选项
  • GCC curses动态库链接的错误
  • 新手,gcc如何链接自己编的库文件呀?万分感激.
  • gcc链接的库,分不分单线程版本的和多线程版本的?
  • 请研究过gcc链接器的高手帮忙!
  • gcc链接的时候报错,为什么?
  • 问个弱弱的关于GCC的链接问题
  • arm-linux-gcc 编译时加载<math.h>动态链接库的问题
  • 帮忙看看,gcc中 把所有的目标文件链接为动态库 的命令 错在哪里?
  • 求助:程序能编译但不能链接,重新安装了GCC也是那样的问题
  • gcc 链接问题
  • 在Unix环境下用gcc如何编译成动态链接库文件?类似Windows下的DLL文件。
  • 用gcc指定需要链接的库的命令是什么?
  • gcc编译链接的时候出错,不能生成可执行文件。
  • Help:gcc链接出错,cannot open crt1.o!
  • gcc 非静态链接产生段错误
  • gcc能否为每个链接的动态库单独指定搜索路径和运行时路径呢
  • gcc编译/链接的库,分不分ansi/unicode/多字节版本?
  • 一个gcc与动态库的问题
  • makefile中加入动态库编译,在gcc下正常,在arm gcc下说库找不到?
  • AIX下gcc编译器怎么使用动态连接库
  • 使用gcc,如何在Solaris上生成so动态库文件?
  • gcc 做一个动态库 要包含一个静态库
  • 自己编的动态库与应用程序必须使用一个(版本)gcc吗?
  • solaris上用gcc编译出的动态库老是无法找到导出函数
  • GCC中静态连接和动态连接的区别(LINUX下)
  • gcc编译动态连接库一问
  • GCC 编译使用动态链接库和静态链接库的方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • GCC无法安装的问题,希望有人帮我( Debian 4.04ra无法安装GCC)
  • gcc与arm-linux-gcc编译的问题???
  • 疑惑softfloat的问题,并求arm-linux-gcc和arm-linux-softfloat-gcc4.1.1
  • 安装Oracel,关于ln -s /usr/i386-glibc-2.1-linux/bin/i386-glibc21-linux-gcc gcc的问题
  • 卸载和安装GCC问题
  • gcc安装的问题
  • cc与gcc的问题
  • 关于gcc的问题!
  • gcc 问题
  • 内核版本问题 GCC版本问题
  • solaris下gcc问题
  • GCC 与 Samba 问题 ?
  • gcc-g++版本问题
  • gcc问题,求助
  • 请大虾支招啊-gcc 编译选项问题 以及 makefile的问题
  • 初学gcc使用的问题
  • ****求助,关于REDHAT LINUX 9下的GCC编译器问题.............
  • Ubuntu8.04安装GCC问题
  • gcc安装遇到的问题
  • 请问大虾有关在windows上移植GCC的问题。
  • Linux下GCC内置原子操作函数(多线程资源访问)介绍
  • 使用popen来执行gcc命令,如何根据读出来的gcc的输出来判断gcc是否编译成功?
  • 命令:mips_fp_le-gcc,mipsel-gcc 是什么意思?跟一般的gcc有什么区别?
  • 怎样升级我的GCC呀,我用的RH7.2,GCC 2.96 ,我从网上下载了一个gcc-3.2.3.tar.gz
  • arm-elf-gcc 和 arm-linux-gcc有什么区别?arm-elf-gcc里的elf代表什么?
  • gcc-ccore、avr-gcc及arm-gcc的区别
  • gcc在哪里?bash:gcc:command not found
  • 如何删掉GCC3.0(我需要GCC2.0-----)
  • Windows版GCC TDM-GCC
  • 急问:如何卸掉gcc 3.2庄gcc 2.96
  • IT科技资讯 iis7站长之家


  • 站内导航:


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

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

    浙ICP备11055608号-3