编译/链接到libpano13

时间:2012-07-22 22:44:38

标签: c++ compilation g++ linker-errors static-linking

我正在尝试使用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 ++能够找到库
  6. 但是,由于某种原因,g ++无法找到StringtoFullPath的符号。

    有没有人对此为何会有任何建议/想法?

    非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

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

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

尝试使用extern“C”{...}块包围#include作为标题。