1

我试图在使用 libpano13 中的函数时编译一个非常简单的程序,但我遇到了链接错误。我在 Ubuntu 10.04 上,并做了以下事情:

sudo apt-get install libpano13-dev

我的示例程序如下:

#include <cstring>
#include <pano13/PTcommon.h>

int main(int argc, char **argv) {
    fullPath *outFile = new fullPath();
    StringtoFullPath(outFile, (char *)"/tmp/randomImage.jpg");

    return 0;
}

我正在尝试使用以下命令编译它(上面的代码位于名为 panoTest.cpp 的文件中):

$ g++ panoTest.cpp -o testApp -L/usr/lib -lpano13

当我运行此命令时,我收到以下错误:

$ g++ panoTest.cpp -o testApp -L/usr/lib -lpano13 
/tmp/ccyIioEi.o: In function `main':
panoTest.cpp:(.text+0x87): undefined reference to `StringtoFullPath(fullPath*, char*)'
collect2: ld returned 1 exit status
make: *** [all] Error 1

现在,我检查了 /usr/lib 的 libpano* 并找到了以下文件:

$ ls /usr/lib/libpano*
/usr/lib/libpano13.a  /usr/lib/libpano13.so  /usr/lib/libpano13.so.1
/usr/lib/libpano13.so.1.0.0

我使用 nm 检查了 libpano13.so 并得到以下输出:

$ nm --demangle /usr/lib/libpano13.a | grep StringtoFullPath
U StringtoFullPath
U StringtoFullPath
00000000 T StringtoFullPath

$ nm --demangle /usr/lib/libpano13.so | grep StringtoFullPath
nm: /usr/lib/libpano13.so: no symbols

我还使用 objdump 检查了它:

$ objdump -T /usr/lib/libpano13.so | grep StringtoFullPath
00057fd0 g    DF .text  0000004c  Base        StringtoFullPath

因此,以下似乎是正确的:

  1. libpano13 存在于 /usr/lib 中,
  2. libpano13 包含 StringtoFullPath 的符号,
  3. 我正在使用 /usr/lib 的正确库目录,
  4. 我正在使用正确的 pano13 库名称,并且
  5. g++ 能够找到库

但是,由于某种原因,g++ 无法找到 StringtoFullPath 的符号。

有人对为什么会发生这种情况有任何建议/想法吗?

任何帮助将不胜感激!

4

1 回答 1

2

undefined reference to `StringtoFullPath(fullPath*, char*)'

我有点担心:它包含参数的类型。大多数 Linux 库都不是 C++,所以应该没有类型......

尝试用 extern "C" { ... } 块包围标题的#include。

于 2012-07-22T23:00:46.970 回答