天天看點

java 如何使用dylib_捆綁應用程式中的dylib和架構

您可以手動更改所有路徑,但這樣做容易出錯,冗長而痛苦 . 我建議使用一個工具為你做:cpack包含cpack .

無論如何,你應該使用:@loader_path . 見Dylib .

對于MacOS X,以下代碼建立一個包并使用root權限正确複制homebrew dylib . 但是,您必須檢查使用自制軟體編譯的每個lib都具有正确的參數 .

通常,對于部署,最好手動編譯庫 . 我在使用自制庫(ffmpeg)時遇到了一些問題 . 但不是Qt也不是Boost :-) .

if( USE_QT5 )

qt5_use_modules( MyApp Core OpenGL Sql Multimedia Concurrent )

endif()

# Install stuff

set( plugin_dest_dir bin )

set( qtconf_dest_dir bin )

set( APPS "\${CMAKE_INSTALL_PREFIX}/bin/MyApp" )

if( APPLE )

set( plugin_dest_dir MyApp.app/Contents/ )

set( qtconf_dest_dir MyApp.app/Contents/Resources )

set( APPS "\${CMAKE_INSTALL_PREFIX}/MyApp.app" )

endif( APPLE )

if( WIN32 )

set( APPS "\${CMAKE_INSTALL_PREFIX}/bin/MyApp.exe" )

endif( WIN32 )

#--------------------------------------------------------------------------------

# Install the MyApp application, on Apple, the bundle is at the root of the

# install tree, and on other platforms it'll go into the bin directory.

install( TARGETS MyApp

BUNDLE DESTINATION . COMPONENT Runtime

RUNTIME DESTINATION bin COMPONENT Runtime

)

#--------------------------------------------------------------------------------

# Install needed Qt plugins by copying directories from the qt installation

# One can cull what gets copied by using 'REGEX "..." EXCLUDE'

install( DIRECTORY "${QT_PLUGINS_DIR}/imageformats"

"${QT_PLUGINS_DIR}/codecs"

"${QT_PLUGINS_DIR}/phonon_backend"

"${QT_PLUGINS_DIR}/sqldrivers"

"${QT_PLUGINS_DIR}/accessible"

"${QT_PLUGINS_DIR}/bearer"

"${QT_PLUGINS_DIR}/graphicssystems"

DESTINATION ${plugin_dest_dir}/PlugIns

COMPONENT Runtime

FILES_MATCHING

PATTERN "*.dylib"

PATTERN "*_debug.dylib" EXCLUDE

)

#--------------------------------------------------------------------------------

# install a qt.conf file

# this inserts some cmake code into the install script to write the file

install( CODE "

file(WRITE \"\${CMAKE_INSTALL_PREFIX}/${qtconf_dest_dir}/qt.conf\" \"\")

" COMPONENT Runtime

)

#--------------------------------------------------------------------------------

# Use BundleUtilities to get all other dependencies for the application to work.

# It takes a bundle or executable along with possible plugins and inspects it

# for dependencies. If they are not system dependencies, they are copied.

# directories to look for dependencies

set( DIRS ${QT_LIBRARY_DIRS} ${MYAPP_LIBRARIES} )

# Now the work of copying dependencies into the bundle/package

# The quotes are escaped and variables to use at install time have their $ escaped

# An alternative is the do a configure_file() on a script and use install(SCRIPT ...).

# Note that the image plugins depend on QtSvg and QtXml, and it got those copied

# over.

install( CODE "

file(GLOB_RECURSE QTPLUGINS

\"\${CMAKE_INSTALL_PREFIX}/${plugin_dest_dir}/plugins/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")

set(BU_CHMOD_BUNDLE_ITEMS ON)

include(BundleUtilities)

fixup_bundle(\"${APPS}\" \"\${QTPLUGINS}\" \"${DIRS}\")

" COMPONENT Runtime

)

# To Create a package, one can run "cpack -G DragNDrop CPackConfig.cmake" on Mac OS X

# where CPackConfig.cmake is created by including CPack

# And then there's ways to customize this as well

set( CPACK_BINARY_DRAGNDROP ON )

include( CPack )