导航:首页 > 源码编译 > 加fpic参数编译a

加fpic参数编译a

发布时间:2023-04-23 13:22:55

❶ 静态库提示加fipc是什么意思

在使用静态库时,如果出现需要加入“-fPIC”的提示,一般是由于静态库中的一些代码(比如全局变量等)在编译时未被编译成位戚敏置无关代码(Position Independent Code, PIC),而导致的。加上“-fPIC”参数可以让编译器在编肆吵译时生成位置无关代码,以使静态库在链接时更加灵活、安全和可移植。

linux环境下,可以在编译时使用如下命令来加入“-fPIC”选项:

gcc -c -fPIC example.c -o example.o

这里裂仔侍的“-c”表示仅进行编译而不进行链接,“-fPIC”表示生成位置无关代码。如果要将多个目标文件打包成静态库,则可以使用如下命令:

ar rcs libexample.a example1.o example2.o example3.o

其中“libexample.a”为静态库的名称,“example1.o”等为目标文件。

需要注意的是,加入“-fPIC”选项会稍微降低代码执行效率,因此在编译时需要根据具体情况权衡是否需要加入该选项。

❷ 使用-fPIC选项编译出protobuf静态库libprotobuf.a

用的64位Ubuntu系统,开发一个共享库so使用到了protobuf,如果链接libprotobuf.so就需要一起打包带走,否则可能因protobuf版轮顷丛本较多腊樱出现版本不匹配的问题,所以需要它链接静态库libprotobuf.a,但是链乎携接时候报错: relocation R_X86_64_32 against `a local symbol’ can not be used when making a shared object; recompile with -fPIC。

❸ Linux下使用make命令,总是报要加上“-fPIC”,请问如何加

gcc -c -fpic XXX.c

❹ 如何使用自己的makefile编译android ndk项目

android ndk提供了一套自己的makefile管理方式,要将源码项目移植到android平台,需要按照android的makefile规则编写makefile,还要按android的规则部署源码目录,对一个有自己的makefile管理方法的大型项目来说,只是做一下makefile迁移工作就是一件很麻烦的事。
其实android ndk上的编译说到底也就是交叉编译,只要配置好交叉编译工具链,使用原有的makefile也是可以编译出在android运行的c、c++程序的。
以android-ndk-r4-crystax的ndk版本为例:
编译器路径 android-ndk-r4-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin
名称前缀 arm-eabi-
头文件目录 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/include
库文件目录 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/lib
你可以试一下上面的配置,如果编译链接都没有问题,可以adb push到android设备上运行看看,什么结果?
有点崩溃,根本运行不起来,你也许想试试看android自带的ndk例子,确实是能够运行的,问题在哪儿呢?
只是正确配置了编译器、头文件、库文件还不够,还需要配置编译、链接的参数,android例子中编译链接的参数是什么呢?你也许想深究一下android的makefile,可是不久你会发现那是更崩溃的事情,里面用了很多的make脚本函数。其实android的makefile是可以把执行的详细命令输出来的,只要make的时候加上V=1即可。可以看到确实带了很多参数
编译参数:
-fpic
-mthumb-interwork
-ffunction-sections
-funwind-tables
-fstack-protector
-fno-short-enums
-Wno-psabi
-march=armv5te
-mtune=xscale
-msoft-float
-mthumb
-fomit-frame-pointer
-fno-strict-aliasing
-finline-limit=64
-Wa,--noexecstack
-D__ARM_ARCH_5__
-D__ARM_ARCH_5T__
-D__ARM_ARCH_5E__
-D__ARM_ARCH_5TE__
-DANDROID
链接参数:

-nostdlib
-Bdynamic
-Wl,-dynamic-linker,/system/bin/linker
-Wl,--gc-sections
-Wl,-z,noreloc
-Wl,--no-undefined
-Wl,-z,noexecstack
-L$(PLATFORM_LIBRARY_DIRECTORYS)
crtbegin_static.o
crtend_android.o
这其中链接参数中的-Wl,-dynamic-linker,/system/bin/linker、crtbegin_static.o、crtend_android.o是最关键的,android使用了自己的进程加载器,并且自定义了c运行时的启动结束。难怪先前编译的进程启动不了。

❺ gcc编译错误!

提示说需要-fPIC编译,然后在链接动态库的地方加上-fPIC的参数编译结果还是报错,需要把共享库所用到的所有静态库都采用-fPIC编译一边才可以成功的在64位环境下编译出动态库。
这里的-fPIC指的是地址无关代码

你看看这里的这篇文章吧:http://www.cnblogs.com/lightsalt/archive/2011/10/19/2217628.html

❻ gcc 生成动态库时-fpic选项是什么意思。

fpic:产生位置无关码

解释一下,位置无关码就是可以在进程的任意内存位置执行的目标码,动态链接库必须使用。

阅读全文

与加fpic参数编译a相关的资料

热点内容
如何保证服务器优质 浏览:92
小微信aPP怎么一下找不到了 浏览:299
算法纂要学术价值 浏览:973
程序员你好是什么意思 浏览:799
倩女幽魂老服务器如何玩 浏览:559
电子钟单片机课程设计实验报告 浏览:997
看加密频道 浏览:379
程序员算不算流水线工人 浏览:632
三星电视我的app怎么卸载 浏览:44
简述vi编译器的基本操作 浏览:507
让程序员选小号 浏览:91
加强数字货币国际信息编译能力 浏览:584
购买的app会员怎么退安卓手机 浏览:891
程序员的种类及名称 浏览:293
美国程序员薪资 浏览:13
黑石通汇证券服务器什么时候到期 浏览:393
东方财富app里我的关注怎么看 浏览:749
bm3d单反级降噪算法 浏览:457
华为安卓机激活时间怎么查询 浏览:850
如何用优盘重装服务器系统 浏览:317