Я компилирую приложение , которое использует систему сборки CMake для macOS 10.15.4. Когда я запускаю построенное приложение, я получаю сообщение об ошибке (Application built with libpng-1.5.23 but running with 1.6.37
), сообщающее мне, что у меня есть несоответствие между версией libpng, для которой было скомпилировано приложение, и той, которая используется во время работы:
Hostname:sample_data username$ ~/src/github/hoche/splat/build/src/Debug/splat -t ~/src/github/hoche/splat/sample_data/wnju-dt.qth -sdelim _ -L 5 -maxpages 4
.
.
.
Writing Signal Strength map "/Users/username/src/github/hoche/splat/sample_data/wnju-dt.png" (2400x2430 image)... libpng warning: Application built with libpng-1.5.23 but running with 1.6.37
Done!
Я сказал CMake создать файл проекта Xcode для Xcode 11.3. Рассматриваемое приложение использует libpng. Я говорю CMake использовать libpng со следующим предложением в моем CMakeLists.txt:
find_package(PNG REQUIRED)
find_package(JPEG REQUIRED)
find_package(Threads REQUIRED)
include_directories(${PNG_INCLUDE_DIR})
add_executable(splat
.
.
.)
target_link_libraries(splat bz2 ${PNG_LIBRARIES} ${JPEG_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
Я установил libpng через MacPorts. Когда я просматриваю строки компоновщика в сгенерированном проекте XCode, они выглядят так:
otool -L
отчеты:
Hostname:sample_data username$ otool -L ~/src/github/hoche/splat/build/src/Debug/splat
/Users/username/src/github/hoche/splat/build/src/Debug/splat:
/usr/lib/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.5)
/opt/local/lib/libpng16.16.dylib (compatibility version 54.0.0, current version 54.0.0)
/opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.11)
/opt/local/lib/libjpeg.9.dylib (compatibility version 13.0.0, current version 13.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 800.7.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1281.0.0)
Если я проверю файлы в месте, указанном в строке компоновщика, они тоже будут отображаться правильно:
HOstname:sample_data username$ ls -al /opt/local/lib/libpng*
lrwxr-xr-x 1 root admin 10 Oct 28 2019 /opt/local/lib/libpng.a -> libpng16.a
lrwxr-xr-x 1 root admin 14 Oct 28 2019 /opt/local/lib/libpng.dylib -> libpng16.dylib
-rwxr-xr-x 1 root admin 177352 Oct 28 2019 /opt/local/lib/libpng16.16.dylib
-rw-r--r-- 1 root admin 253120 Oct 28 2019 /opt/local/lib/libpng16.a
lrwxr-xr-x 1 root admin 17 Oct 28 2019 /opt/local/lib/libpng16.dylib -> libpng16.16.dylib
Почему libpng жалуется на несовпадение версий? Это действительно использует неправильную версию? Если так, почему otool -L
не показывает версию, с которой он работает?