Ned Deily <n...@acm.org> added the comment: Antoine is correct in principle, however LD_LIBRARY_PATH does not work on OS X. To test without installing, you would need to use DYLD_LIBRARY_PATH instead. Also keep in mind that, unlike most other systems, OS X binaries embed absolute paths to dynamic libraries.
As a learning exercise for myself, I constructed this example. I added a printf to the errno module, a module that is included in the shared library, to help see what's happening: $ cd /tmp/a/py3k $ ./configure --prefix=/tmp/a/local --enable-shared LDFLAGS=-L/opt/local/lib CPPFLAGS=-I/opt/local/include && make $ file ./libpython3.3m.dylib ./libpython3.3m.dylib: Mach-O 64-bit dynamically linked shared library x86_64 $ otool -L ./python ./python: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.42.0) /tmp/a/local/lib/libpython3.3m.dylib (compatibility version 3.3.0, current version 3.3.0) [...] # note, "make install" not yet run so lib not available in configured path $ ls /tmp/a/local/lib/libpython3.3m.dylib ls: /tmp/a/local/lib/libpython3.3m.dylib: No such file or directory $ ./python -c 'pass' dyld: Library not loaded: /tmp/a/local/lib/libpython3.3m.dylib Referenced from: /private/tmp/a/py3k/./python Reason: image not found Trace/BPT trap # override path so that uninstalled shared lib is found in build dir $ DYLD_LIBRARY_PATH=. ./python -c 'pass' errno module version 0 $ make install $ ls /tmp/a/local/lib/libpython3.3m.dylib /tmp/a/local/lib/libpython3.3m.dylib* # now lib is installed and found $ ./python -c 'pass' errno module version 0 # edit message in errno module to "version 1" $ make # have not done a new install so old shared lib is found $ ./python -c 'pass' errno module version 0 # enable dynamic loader printing of loads $ export DYLD_PRINT_LIBRARIES=1 $ ./python -c 'pass' dyld: loaded: /private/tmp/a/py3k/./python dyld: loaded: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation dyld: loaded: /tmp/a/local/lib/libpython3.3m.dylib [...] errno module version 0 # override loads from build directory -> works correctly $ DYLD_LIBRARY_PATH=. ./python -c 'pass' dyld: loaded: /private/tmp/a/py3k/./python dyld: loaded: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation dyld: loaded: /private/tmp/a/py3k/libpython3.3m.dylib errno module version 1 # install updated lib $ make install # also works correctly $ ./python -c 'pass' dyld: loaded: /private/tmp/a/py3k/./python dyld: loaded: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation dyld: loaded: /tmp/a/local/lib/libpython3.3m.dylib [...] errno module version 1 So the moral of the story is: if you use --enable-shared, you need to be careful to either "make install" or to use DYLD_LIBRARY_PATH=/path/to/build_directory. Skip, are you OK with closing this issue? ---------- resolution: -> works for me stage: -> committed/rejected status: open -> pending _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue11653> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com