主题 : 编译的so文件在开发板上使用不了 复制链接 | 浏览器收藏 | 打印
在乎在乎的,无视不屑的,宁真实
级别: 新手上路
UID: 79720
精华: 0
发帖: 40
金钱: 205 两
威望: 41 点
综合积分: 80 分
注册时间: 2012-10-12
最后登录: 2014-01-07
楼主  发表于: 2012-12-27 13:25

 编译的so文件在开发板上使用不了

Makefile文件大致如下:
CC = arm-linux-gcc
INCLUDE = ../include
CFLAGS = -Wall -O1 -I../include -Dlinux
TARGET = libtest.so
LFLAGS = -shared -L ../lib -static -lm -lc
%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@
SOURCES = $(wildcard *.c )
OBJS = $(patsubst %.c,%.o,$(patsubst %.c,%.o,$(SOURCES)))
$(TARGET) : $(OBJS)
    $(CC) $(OBJS) $(LFLAGS) -o $(TARGET)

可以编译成功,但是载到开发板是使用dlopen出错。 dlopen("./libtest.so",RTLD_LAZY) 返回的指针为0x0。
dlerror() 返回的信息 为 unexpected reloc type 0x03。

一直定位不到错误,查到的信息说要添上
LD:=arm-linux-ld
但是还未验证,请大虾们看看是否还有其他错误。

在乎在乎的,无视不屑的,宁真实
级别: 新手上路
UID: 79720
精华: 0
发帖: 40
金钱: 205 两
威望: 41 点
综合积分: 80 分
注册时间: 2012-10-12
最后登录: 2014-01-07
1楼  发表于: 2012-12-29 10:01

 回 楼主(点点洋溢) 的帖子

gcc是一套完整编译器,arm-linux-gcc也类似,之前的验证失败了,也显得多此一举

LFLAGS = -shared -L ../lib -static -lm -lc ,这里要加上-fPIC 选项。

不过有疑惑的是,加上 -static 之后,链接的 都是静态库了。 我看到相关路径下有libc.so 和libc.a,配置之后调用的是libc.a。
如果我要使用libc.so 是不是将-lc放到 -static之前? 但是pc中的 ld.so.conf 中并没相应的路径说明,这点是否能解释一下?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2012-12-29 12:56

 回 1楼(点点洋溢) 的帖子

加了--static之后,链接时总是优先使用静态库的。我不知道你为什么要用--static
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
在乎在乎的,无视不屑的,宁真实
级别: 新手上路
UID: 79720
精华: 0
发帖: 40
金钱: 205 两
威望: 41 点
综合积分: 80 分
注册时间: 2012-10-12
最后登录: 2014-01-07
3楼  发表于: 2012-12-30 13:29
去掉-static 之后,编译通过,使用时候也没有爆出错误。
makefile文件在编译pc版本的so文件在使用上并没有问题,因为文件是前人写好的,所以就没有随意改动。
直到爆出错误,才去寻找问题出错。
不过总算解决问题了,谢谢版主提示。