当前位置: 技术问答>javascript开源软件
iis7站长之家
链接问题,非常奇怪
来源: 互联网 发布时间:2015-07-01
本文导语: 我的程序用到了tcl的库,需要链接tcl library. 用如下命令: (其中/usr/lib为tcl lib的路径,有libtcl8.3.so文件。) gcc -shared -L/usr/lib -ltcl8.3 -o libdir.so dir.o 报告: ld: 0706-006 Cannot find or open library file: -l tcl8.3 ...
我的程序用到了tcl的库,需要链接tcl library.
用如下命令:
(其中/usr/lib为tcl lib的路径,有libtcl8.3.so文件。)
gcc -shared -L/usr/lib -ltcl8.3 -o libdir.so dir.o
报告:
ld: 0706-006 Cannot find or open library file: -l tcl8.3
ld:open(): No such file or directory
collect2: ld returned 255 exit status
make: The error code from the last command is 1.
但是我用如下命令:
gcc -shared /usr/lib/libtcl8.3.so -o libdir.so dir.o
就可以链接通过
但用dump -Tv libdir.so输出的是绝对路径,因而在别的机器上(如果没有在相同
的文件下存放libtcl8.3.so),就无法使用、
$> dump -Tv libdir.so
libdir.so:
***Loader Section***
***Loader Symbol Table Information***
[Index] Value Scn IMEX Sclass Type IMPid Name
[0] 0x200009a0 .data RW SECdef [noIMid] __rtinit
[1] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_GetStringFromObj
[2] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_ListObjAppendElement
[3] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_NewDoubleObj
[4] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_NewListObj
[5] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_NewStringObj
[6] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_CreateCommand
[7] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_SetResult
[8] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_PkgProvide
[9] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_PkgRequire
[10] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_SetVar2Ex
[11] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_GetString
[12] 0x00000000 undef IMP UA EXTref libc.a(shr.o) _system_configuration
[13] 0x00000000 undef IMP DS EXTref libc.a(shr.o) atoi
[14] 0x00000000 undef IMP DS EXTref libc.a(shr.o) sleep
[15] 0x00000000 undef IMP DS EXTref libc.a(shr.o) opendir
[16] 0x00000000 undef IMP DS EXTref libc.a(shr.o) readdir
[17] 0x20000a0c .data EXP DS Ldef [noIMid] _GLOBAL__FI_libdir_so
[18] 0x20000a18 .data EXP DS Ldef [noIMid] _GLOBAL__FD_libdir_so
[19] 0x20000a24 .data EXP DS Ldef [noIMid] _GLOBAL__DI
[20] 0x20000a30 .data EXP DS Ldef [noIMid] _GLOBAL__DD
[21] 0x20000a3c .data EXP DS Ldef [noIMid] GetFileList
[22] 0x20000a48 .data EXP DS Ldef [noIMid] UnixSleep
[23] 0x20000a54 .data EXP DS Ldef [noIMid] Dir_Init
用如下命令:
(其中/usr/lib为tcl lib的路径,有libtcl8.3.so文件。)
gcc -shared -L/usr/lib -ltcl8.3 -o libdir.so dir.o
报告:
ld: 0706-006 Cannot find or open library file: -l tcl8.3
ld:open(): No such file or directory
collect2: ld returned 255 exit status
make: The error code from the last command is 1.
但是我用如下命令:
gcc -shared /usr/lib/libtcl8.3.so -o libdir.so dir.o
就可以链接通过
但用dump -Tv libdir.so输出的是绝对路径,因而在别的机器上(如果没有在相同
的文件下存放libtcl8.3.so),就无法使用、
$> dump -Tv libdir.so
libdir.so:
***Loader Section***
***Loader Symbol Table Information***
[Index] Value Scn IMEX Sclass Type IMPid Name
[0] 0x200009a0 .data RW SECdef [noIMid] __rtinit
[1] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_GetStringFromObj
[2] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_ListObjAppendElement
[3] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_NewDoubleObj
[4] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_NewListObj
[5] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_NewStringObj
[6] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_CreateCommand
[7] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_SetResult
[8] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_PkgProvide
[9] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_PkgRequire
[10] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_SetVar2Ex
[11] 0x00000000 undef IMP DS EXTref /usr/lib/libtcl8.3.so Tcl_GetString
[12] 0x00000000 undef IMP UA EXTref libc.a(shr.o) _system_configuration
[13] 0x00000000 undef IMP DS EXTref libc.a(shr.o) atoi
[14] 0x00000000 undef IMP DS EXTref libc.a(shr.o) sleep
[15] 0x00000000 undef IMP DS EXTref libc.a(shr.o) opendir
[16] 0x00000000 undef IMP DS EXTref libc.a(shr.o) readdir
[17] 0x20000a0c .data EXP DS Ldef [noIMid] _GLOBAL__FI_libdir_so
[18] 0x20000a18 .data EXP DS Ldef [noIMid] _GLOBAL__FD_libdir_so
[19] 0x20000a24 .data EXP DS Ldef [noIMid] _GLOBAL__DI
[20] 0x20000a30 .data EXP DS Ldef [noIMid] _GLOBAL__DD
[21] 0x20000a3c .data EXP DS Ldef [noIMid] GetFileList
[22] 0x20000a48 .data EXP DS Ldef [noIMid] UnixSleep
[23] 0x20000a54 .data EXP DS Ldef [noIMid] Dir_Init
|
用-ltcl即可,不用-ltcl8.3,也就是不用加上版本号
|
gcc -o libdir.so dir.o -ltcl8.3
直接这样就好了
直接这样就好了
|
up