2010-09-28 59 views
0

我试图让libpng在linux上工作。我无法通过netbeans使它工作,所以我直接运行g ++,编译为g++ -lpng -lz main.cpp -o test。当我尝试运行它时,它输出./test: error while loading shared libraries: libpng14.so.14: cannot open shared object file: No such file or directory。我想这意味着我动态链接和无法找到.so文件链接libpng与g ++

~/Programs/NetBeansProjects/DiamondSquare$ ldd test linux-gate.so.1 => (0x008a5000) libpng14.so.14 => not found libz.so.1 => /usr/local/lib/libz.so.1 (0x00209000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0094b000) libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x00e3a000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00927000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00220000) /lib/ld-linux.so.2 (0x00b85000)

我真的不希望在第一时间动态链接。我怎么解决这个问题?

我知道libpng14.so.14也在/ usr/local/lib中,如果这很重要的话。

如果您能告诉我如何在netbeans中执行此操作,请多加注意。

回答

0

奇怪的是,g ++能够找到库,但测试不能(你可以告诉g ++可以找到它,因为即使只告诉g ++'-lpng',测试特别期望libpn14)。你确定你没有将任何-L或-R标志传递给g ++吗?您的LD_PRELOAD或LD_LIBRARY_PATH环境变量是在您运行g ++的shell中设置的,而不是在您正在运行的shell中进行测试的?您可以将LD_PRELOAD指向特定的共享库,以告诉应用程序或g ++如何找到它,并自动搜索LD_LIBRARY_PATH中的任何文件夹。

还要在“-lpng”之前静态链接libpng放置“-Wl,-Bstatic”。请注意,-Bstatic之后的任何库都将静态链接。您可以切换回动态并使用“-Wl,-Bdynamic -lfoo”列出更多库。

+0

'g ++ -I/usr/local/include/libpng14 -L/usr/local/lib -lpng -lz main.cpp -o test'现在似乎已经成功了。生病看看你说什么。 – Kyle 2010-09-28 19:24:09

0

动态链接是默认设置,通常应该首选。你说libpng位于/ usr/local/lib中,你对此有正面评价吗?它找到/usr/local/lib/libz.so.1。如果libpng14.so.14在/ usr/local/lib中,它也应该找到它。