• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : 再发一贴,在应用程序中如何链接动态库呀 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 6147
精华: 0
发帖: 91
金钱: 640 两
威望: 241 点
综合积分: 182 分
注册时间: 2009-05-21
最后登录: 2011-06-23
楼主  发表于: 2009-11-10 16:04

 再发一贴,在应用程序中如何链接动态库呀

管理提醒: 本帖被 kasim 执行合并操作(2009-11-11)
各位
我现在编译的程序用静态方式( -static)出来的可执行文件运行正常,但是按动态来编译就存在问题,我现在想请问下,你们是如何设置动态库链接的,配置ld.so.conf好像是不行的,因为busybox不支持ldconfig,设置全局变量LD_LIBRARY_PATH也不行,是不是要在编译程序时,指定动态库存放的文件呀,请教下
级别: 侠客
UID: 6147
精华: 0
发帖: 91
金钱: 640 两
威望: 241 点
综合积分: 182 分
注册时间: 2009-05-21
最后登录: 2011-06-23
1楼  发表于: 2009-11-09 18:01

 请教下:EABI的问题

各位好,
想问下,我现在采用EABI的交叉编译器编译内核后成功,文件系统OK,但是我现在写应用程序放在上面不能运行,提示Illegal instruction错误,不知道是不是因为arm-linux-g++的参数有问题呀

我是 -c -O -mtune=arm9tdmi -ffolat-store
级别: 侠客
UID: 6147
精华: 0
发帖: 91
金钱: 640 两
威望: 241 点
综合积分: 182 分
注册时间: 2009-05-21
最后登录: 2011-06-23
2楼  发表于: 2009-11-09 21:45
谁能说下吗
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2009-11-10 08:31
arm-linux-g++的命令行上加上'-march=armv4t', 另外, 用-mtune=arm920t
"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: 6147
精华: 0
发帖: 91
金钱: 640 两
威望: 241 点
综合积分: 182 分
注册时间: 2009-05-21
最后登录: 2011-06-23
4楼  发表于: 2009-11-10 10:55

 回 2楼(kasim) 的帖子

#makefile

PROGRAM = lcd
OBJS = LcdAppDisp.o
INCLUDES = -I/FriendARM/test/
CFLAGS = -c -O -march=armv4t -mtune=arm920t -ffast-math -ffloat-store $(INCLUDES)

DEFINES = -o
CC = arm-linux-g++

$(PROGRAM): $(OBJS)
    $(CC) $(DEFINES) $(PROGRAM) $(OBJS)

.SUFFIXES: .cpp .C .cc .cxx .o

%.o: %.cpp
    $(CC) $(CFLAGS) $<    


还是一样,估计不是编译器的问题了,内核配置时也支持EABI了,按理来说,内核用的是带EABI的gcc编译的,应用程序也是,应该是没有问题的,文件系统也是按这个编译器编的,不过是编译成静态的,这个是不是库没有连接上导致的呀?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
5楼  发表于: 2009-11-10 11:05
what's the output of 'arm-linux-readelf -h lcd' and 'arm-linux-readelf -d lcd'?
"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: 6147
精华: 0
发帖: 91
金钱: 640 两
威望: 241 点
综合积分: 182 分
注册时间: 2009-05-21
最后登录: 2011-06-23
6楼  发表于: 2009-11-10 11:41
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x842c
  Start of program headers:          52 (bytes into file)
  Start of section headers:          2640 (bytes into file)
  Flags:                             0x5000002, has entry point, Version5 EABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         8
  Size of section headers:           40 (bytes)
  Number of section headers:         30
  Section header string table index: 27
这是arm-linux-readelf -h lcd



Elf file type is EXEC (Executable file)
Entry point 0x842c
There are 8 program headers, starting at offset 52

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  EXIDX          0x000760 0x00008760 0x00008760 0x00010 0x00010 R   0x4
  PHDR           0x000034 0x00008034 0x00008034 0x00100 0x00100 R E 0x4
  INTERP         0x000134 0x00008134 0x00008134 0x00013 0x00013 R   0x1
      [Requesting program interpreter: /lib/ld-linux.so.3]
  LOAD           0x000000 0x00008000 0x00008000 0x00774 0x00774 R E 0x8000
  LOAD           0x000774 0x00010774 0x00010774 0x00144 0x00148 RW  0x8000
  DYNAMIC        0x000780 0x00010780 0x00010780 0x00100 0x00100 RW  0x4
  NOTE           0x000148 0x00008148 0x00008148 0x00020 0x00020 R   0x4
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x4

Section to Segment mapping:
  Segment Sections...
   00     .ARM.exidx
   01    
   02     .interp
   03     .interp .note.ABI-tag .hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .plt .text .fini .rodata .ARM.exidx .eh_frame
   04     .init_array .fini_array .jcr .dynamic .got .data .bss
   05     .dynamic
   06     .note.ABI-tag
   07    
这是arm-linux-readelf -l lcd
级别: 侠客
UID: 6147
精华: 0
发帖: 91
金钱: 640 两
威望: 241 点
综合积分: 182 分
注册时间: 2009-05-21
最后登录: 2011-06-23
7楼  发表于: 2009-11-10 11:43

 回 5楼(mikej) 的帖子

就是一个简单的helloword的例子应用是没有用到动态链接库的吧,调用printf,是不是动态链接库没有链接好
级别: 侠客
UID: 6147
精华: 0
发帖: 91
金钱: 640 两
威望: 241 点
综合积分: 182 分
注册时间: 2009-05-21
最后登录: 2011-06-23
8楼  发表于: 2009-11-10 14:49

 回 6楼(mikej) 的帖子

已经可以运行了,编译成静态运行,放在下面是可以运行,这样的话就确定是动态链接库的问题,想问下,mini2440是怎么做的呀
这个阶段正是我事业的上升期,我怎么能走得开呢?
级别: 精灵王
UID: 3197
精华: 3
发帖: 770
金钱: 6995 两
威望: 5398 点
综合积分: 1600 分
注册时间: 2008-12-30
最后登录: 2010-12-31
9楼  发表于: 2009-11-10 22:36
描述的不太清楚。
编译参数?
你的程序依赖库?(arm-linux-readelf -a "your binary" | grep "Shared")
有可能还需要看编译器版本。
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go