Open dandingol03 opened 2 years ago
Hey @dandingol03 can you post more details of how you compiled your program (i.e., which commands you used)?
It seems like your binary has the incorrect library path encoded in it, so the loader can't find the panda dylib when you try to run.
Can you try to run the command below to list the libraries linked with your binary?
otool -L 3d-game-shaders-for-beginners
After that, you can use a tool called install_name_tool
to fix the path yourself:
install_name_tool -change <path to libp3framework returned by otool> <correct path to libp3framework> 3d-game-shaders-for-beginners
Here's what I've done.
$ clang++ \
-c src/main.cxx \
-o 3d-game-shaders-for-beginners.o \
-std=gnu++11 \
-g \
-O2 \
-I/Library/Developer/Panda3D/include
$ clang++ \
3d-game-shaders-for-beginners.o \
-o 3d-game-shaders-for-beginners \
-L/Library/Developer/Panda3D/lib \
-lp3framework \
-lpanda \
-lpandafx \
-lpandaexpress \
-lpandaphysics \
-lp3dtoolconfig \
-lp3dtool \
-lpthread
$ otool -L 3d-game-shaders-for-beginners
3d-game-shaders-for-beginners:
@loader_path/../lib/libp3framework.1.10.dylib (compatibility version 1.10.0, current version 1.10.9)
@loader_path/../lib/libpanda.1.10.dylib (compatibility version 1.10.0, current version 1.10.9)
@loader_path/../lib/libpandafx.1.10.dylib (compatibility version 1.10.0, current version 1.10.9)
@loader_path/../lib/libpandaexpress.1.10.dylib (compatibility version 1.10.0, current version 1.10.9)
@loader_path/../lib/libpandaphysics.1.10.dylib (compatibility version 1.10.0, current version 1.10.9)
@loader_path/../lib/libp3dtoolconfig.1.10.dylib (compatibility version 1.10.0, current version 1.10.9)
@loader_path/../lib/libp3dtool.1.10.dylib (compatibility version 1.10.0, current version 1.10.9)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.60.1)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 904.4.0)
As you can see in the output above, all panda-related libraries were marked as a directory above and in a lib dir, which doesn't exist.
We could either copy the dylibs to that directory or fix the paths. I chose to fix them.
install_name_tool -change '@loader_path/../lib/libp3framework.1.10.dylib' /Library/Developer/Panda3D/lib/libp3framework.1.10.dylib 3d-game-shaders-for-beginners
install_name_tool -change '@loader_path/../lib/libpanda.1.10.dylib' /Library/Developer/Panda3D/lib/libpanda.1.10.dylib 3d-game-shaders-for-beginners
install_name_tool -change '@loader_path/../lib/libpandafx.1.10.dylib' /Library/Developer/Panda3D/lib/libpandafx.1.10.dylib 3d-game-shaders-for-beginners
install_name_tool -change '@loader_path/../lib/libpandaexpress.1.10.dylib' /Library/Developer/Panda3D/lib/libpandaexpress.1.10.dylib 3d-game-shaders-for-beginners
install_name_tool -change '@loader_path/../lib/libpandaphysics.1.10.dylib' /Library/Developer/Panda3D/lib/libpandaphysics.1.10.dylib 3d-game-shaders-for-beginners
install_name_tool -change '@loader_path/../lib/libp3toolconfig.1.10.dylib' /Library/Developer/Panda3D/lib/libp3toolconfig.1.10.dylib 3d-game-shaders-for-beginners
install_name_tool -change @loader_path/../lib/libp3dtoolconfig.1.10.dylib /Library/Developer/Panda3D/lib/libp3dtoolconfig.1.10.dylib 3d-game-shaders-for-beginners
install_name_tool -change @loader_path/../lib/libp3dtool.1.10.dylib /Library/Developer/Panda3D/lib/libp3dtool.1.10.dylib 3d-game-shaders-for-beginners
$ otool -L 3d-game-shaders-for-beginners
3d-game-shaders-for-beginners:
/Library/Developer/Panda3D/lib/libp3framework.1.10.dylib (compatibility version 1.10.0, current version 1.10.9)
/Library/Developer/Panda3D/lib/libpanda.1.10.dylib (compatibility version 1.10.0, current version 1.10.9)
/Library/Developer/Panda3D/lib/libpandafx.1.10.dylib (compatibility version 1.10.0, current version 1.10.9)
/Library/Developer/Panda3D/lib/libpandaexpress.1.10.dylib (compatibility version 1.10.0, current version 1.10.9)
/Library/Developer/Panda3D/lib/libpandaphysics.1.10.dylib (compatibility version 1.10.0, current version 1.10.9)
/Library/Developer/Panda3D/lib/libp3dtoolconfig.1.10.dylib (compatibility version 1.10.0, current version 1.10.9)
/Library/Developer/Panda3D/lib/libp3dtool.1.10.dylib (compatibility version 1.10.0, current version 1.10.9)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.60.1)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 904.4.0)
this is not a compile error, it is a runtime error. one simple way is to add pand3d to the dyld search path, you can run like this:
DYLD_LIBRARY_PATH=/Library/Developer/Panda3D/lib ./3d-game-shaders-for-beginners
os: mac big sur i have installed the panda3D from the official pkg file. However there is an error when i run the
./3d-game-shaders-for-beginners
: _dyld: Library not loaded: @loaderpath/../lib/libp3framework.1.10.dylib