C++ 将libpng与g链接++
我正在尝试让libpng在linux上工作。我无法通过netbeans让它工作,所以我直接以g++-lpng-lzmain.cpp-o测试的形式运行g++并编译它。当我尝试运行它时,它会输出。/test:加载共享库时出错:libpng14.so.14:无法打开共享对象文件:没有这样的文件或目录。我假设这意味着我正在动态链接,它找不到.so文件 ~/Programs/NetBeansProjects/DiamondSquare$ldd测试 LinuxGate.so.1=>0x008a5000 libpng14.so.14=>未找到 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_.so.1=>/lib/libgcc_.so.1 0x00927000 libc.so.6=>/lib/tls/i686/cmov/libc.so.6 0x0020000 /lib/ld linux.so.2 0x00b85000 首先,我真的不想动态链接。我如何解决这个问题 我知道libpng14.so.14也在/usr/local/lib中,如果这很重要的话C++ 将libpng与g链接++,c++,g++,libpng,C++,G++,Libpng,我正在尝试让libpng在linux上工作。我无法通过netbeans让它工作,所以我直接以g++-lpng-lzmain.cpp-o测试的形式运行g++并编译它。当我尝试运行它时,它会输出。/test:加载共享库时出错:libpng14.so.14:无法打开共享对象文件:没有这样的文件或目录。我假设这意味着我正在动态链接,它找不到.so文件 ~/Programs/NetBeansProjects/DiamondSquare$ldd测试 LinuxGate.so.1=>0x008a5000 li
如果您能告诉我如何在netbeans中执行此操作,请提供额外的注意事项。动态链接是默认设置,通常应首选。你说libpng在/usr/local/lib中,你真的对此持肯定态度吗?它找到/usr/local/lib/libz.so.1。如果libpng14.so.14也在/usr/local/lib中,它应该也能找到它。奇怪的是,g++能找到库,但test不能。你可以说g++能找到它,因为即使你只告诉g++'-lpng',test也特别希望libpn14。您确定没有向g++传递任何-L或-R标志吗?您的LD_PRELOAD或LD_LIBRARY_PATH环境变量是否在运行g++的shell中设置,而不是在运行测试的shell中设置?您可以将LD_PRELOAD指向特定的共享库,告诉应用程序或g++如何找到它,并且会自动搜索LD_library_路径中的任何文件夹 还可以链接libpng,静态地将-Wl,-Bstatic放在-lpng之前。注意,-Bstatic之后的任何库都将静态链接。您可以通过使用-Wl,-Bdynamic-lfoo切换回动态并列出更多库。g++-I/usr/local/include/libpng14-L/usr/local/lib-lpng-lz main.cpp-o测试目前似乎可以实现这一目的。我会调查你说的话。