繁体   English   中英

将libpng与G ++链接

[英]Linking libpng with g++

我正在尝试让libpng在Linux上工作。 我无法通过g++ -lpng -lz main.cpp -o test运行,因此我直接以g++ -lpng -lz main.cpp -o test运行了g ++并进行了编译。 当我尝试运行它时,它./test: error while loading shared libraries: libpng14.so.14: cannot open shared object file: No such file or directory输出./test: error while loading shared libraries: libpng14.so.14: cannot open shared object file: No such file or directory 我认为这意味着我正在动态链接,但找不到.so文件

~/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中执行此操作,则需要加分。

动态链接是默认设置,通常应首选。 您说libpng在/ usr / local / lib中,您对此表示肯定吗? 它找到/usr/local/lib/libz.so.1。 如果libpng14.so.14也位于/ usr / local / lib中,它也应该找到它。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM