2 chenxiao ji chenxiao_ji 于 2014.07.26 22:34 提问

Linux下将静态库编译成动态库的问题

使用JNI技术时,需要将第三方提供的静态库编译成动态库,在编译过程中遇到问题,使用gcc进行编译链接:
gcc -I/home/jichenxiao/java/jdk1.8.0_11/include -I/home/jichenxiao/java/jdk1.8.0_11/include/linux -fPIC -shared -o libAir.so AirConditioner.c -L. -Wl,--whole-archive -lBLNetwork-linux-64 -Wl,--no-whole-archive -lpthread -lrt -lm
其中/home/jichenxiao/java/jdk1.8.0_11/include和/home/jichenxiao/java/jdk1.8.0_11/include/linux为jni.h和jni_md.h的路径,libAir.so为输出的动态库,AirConditioner.c为要一起编译的c程序,-lBLNetwork-linux-64为要编译成动态库的静态库文件libBLNetwork-linux-64.a。编译时报的错误为:
/usr/bin/ld: ./libBLNetwork-linux-64.a(aes.o): relocation R_X86_64_32S against `.bss' can not be used when making a shared object; recompile with -fPIC
./libBLNetwork-linux-64.a(aes.o): error adding symbols: Bad value
collect2: error: ld returned 1 exit status
我不懂编译原理,请教大家,希望大家能给出解决方案,谢谢!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
如何编译为静态库或动态库
要将项目编译为库,使用CMAKE的add_library命令: add_library( [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN) 其中,参数STATIC, SHARED, MODULE指定生成库是静态库、动态库或MODULE(具体
请问 linux下怎样把几个静态库(libabc.a...)编译成一个动态库(libtest.so)
我用 gcc -shared -fPIC libabc.a libdef.a -o libtest.so   生成的 libtest.so 只有空架子, 没内容, 静态库都是用 ar cru 一批 .o 文件产生的。 谢谢 sorry, 先前帖子写错了。这是Makefile LIBDIR = ./lib SRCDIR = ./src VPATH  = $(SRCDIR
依赖静态库,编译生成动态库
如需转载请注明出处! 直入主题,目标是依赖静态库,编译动态库,最终生成二进制文件。 文件目录如下: 文件内容组织: add.c #include "add.h" int add(int a, int b) { int c = a + b; return c; } add.h #ifndef __ADD__ #define __AD
gcc编译工具生成动态库和静态库之一----介绍
gcc编译工具生成动态库和静态库
makefile 编写,编译动态库,编译静态库
1 我 CROSS_COMPILE= CC = $(CROSS_COMPILE)gcc STRIP = $(CROSS_COMPILE)strip CFLAG = -Wall -W -Os -g -o LIBS := -L../lib -lfcgi LIBS += -L../lib -ltinyxml LIBS += -L../lib -lOnvif -lpthread LIBS +=
Linux下用Makefile制作动态库和静态库并编译生成可执行程序
Makefile 一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。在 Linux(unix )环境下使用GNU 的make工具能够比较容易的构建一个属
关于VS2013下制作和使用静态库和动态库
转载自http://www.cnblogs.com/zqh20145320/p/6772985.html
linux编译动态库和静态库的makefile示例
根据GenDll.cpp文件,分别生成动态库.so和静态库.a文件,需要依赖的外部库为opencv。1. 静态库的生成makefile命令的简介可参考:跟我一起写 Makefile。使用ar命令生成.a文件,可参考:Linux下动态库(.so)和静态库(.a)# 1、准备工作,编译方式、目标文件名、依赖库路径的定义。 CC = g++ CFLAGS := -Wall -O3 -std=c++0x
Linux编译多个不同目录下的文件以及静态库、动态库的使用
先看两篇博文,作为基础知识。如果对C/C++编译链接过程都了解的话,可以跳过不看。 http://www.firedragonpzy.com.cn/index.php/archives/2556 http://www.cppblog.com/shifan3/archive/2007/01/05/17325.html 一、  编译不同目录下的多个文件 各个文件的布局如下:
静态调用OpenCV库以及生成自己的静态库
我们暂且不讨论静态库和动态库谁好谁坏了吧,设计初衷不同而已。而且有时候你在和别人对接项目的时候,对方要求你给一个干干净净的lib文件和h头文件(或者一个exe)就行的时候,你总得满足对方的要求吧。试想一下要是我们从网上下载所有的软件都要我们附带下载很多dll,然后自己去配置如何调用的话,那得是何等的烦人!所以静态调用别人的库,以及把自己的代码生成静态库给别人调用的方法还是得掌握。 如何自