我正在尝试使用提供给我的头文件中定义的一些功能,但会不断出现未定义的引用错误。
第一次问,非常努力地遵循格式,并用谷歌搜索我发现的每个主题。
...
// Linux porting
typedef int HWND, BOOL;
extern int LSDisconnect(short hConnect, HWND hWnd);
...
#include "LsApi.h"
int main(int argc, char** argv) {
int retVal = 0;
HWND b = 0;
short devID;
retVal= LSDisconnect (devID,b);
return 0;
}
clang++ -O3 -v -m32 -g -Wall -I. -L/usr/lib -L/usr/local/lib/ -lLsApi main.cpp
(抱歉,我在西班牙语中有ubuntu会尝试翻译错误)
...
...
/tmp/main-bfde60.o: in function `main':
/home/jere/LSAPI/main.cpp:11: undefined reference to `LSDisconnect(short, int)'
locate libLsApi.so
/usr/local/lib/libLsApi.so
(不要粘贴完整的ld命令,因为它由clang生成的非常大)
...
attempt to open /usr/local/lib//libLsApi.so succeeded
-lLsApi (/usr/local/lib//libLsApi.so)
...
nm /usr/local/lib//libLsApi.so | grep LSDisconnect
0004b751 T LSDisconnect
file /usr/local/lib/libLsApi.so
/usr/local/lib/libLsApi.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, with debug_info, not stripped
(我不认为这很重要,因为该符号位于根据nm定义的库中)
ldd /usr/local/lib/libLsApi.so
linux-gate.so.1 (0xf7f0b000)
libpthread.so.0 => /lib32/libpthread.so.0 (0xf492b000)
libdl.so.2 => /lib32/libdl.so.2 (0xf4926000)
libz.so.1 => /usr/lib32/libz.so.1 (0xf4907000)
librt.so.1 => /lib32/librt.so.1 (0xf48fd000)
libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf4777000)
libm.so.6 => /lib32/libm.so.6 (0xf46ac000)
libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf468e000)
libc.so.6 => /lib32/libc.so.6 (0xf44b5000)
/lib/ld-linux.so.2 (0xf7f0d000)
给我一个似乎很奇怪的东西:使用提供的shell脚本安装了LsApi.h和LsApi.so,但是我必须将LsApi.so的名称更改为libLsApi.so,以使链接器能够找到它。
尝试使用gcc是因为它的库很旧,并在Ubuntu Jaunty中尝试了所有相同的操作,并获得了相同的结果。