我正在尝试使用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

因此,以下内容似乎是正确的:
  • libpano13存在于/ usr / lib中,
  • libpano13包含StringtoFullPath的符号
  • 我使用的是/ usr / lib的正确库目录
  • 我使用的是pano13和
  • 的正确库名
  • g++能够找到


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

    是否有人对为什么会这样有任何建议/想法?

    任何帮助将不胜感激!

    最佳答案


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

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

    尝试使用外部“C” {...}块将标题的#include括起来。

    关于c++ - 编译/链接到libpano13,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11604584/

    10-12 00:33