나는 내 응용 프로그램이 실행중인 컴퓨터에 있어야합니다 라이브러리 libmysqlclient.16.dylib
을 가지고, 또는 나는 다음과 같은 오류가 발생합니다 :Cocoa 응용 프로그램 내에서 라이브러리를 묶는 방법은 무엇입니까?
Dyld Error Message: Library not loaded: /usr/local/mysql/lib/libmysqlclient_r.16.dylib Referenced from: /Users/alex/snow server 3.app/Contents/MacOS/snow server Reason: image not found
.
이Dyld Error Message: Library not loaded: /usr/local/mysql/lib/libmysqlclient_r.16.dylib Referenced from: /Users/alex/snow server 3.app/Contents/MacOS/snow server Reason: no suitable image found. Did find: /usr/local/mysql/lib/libmysqlclient_r.16.dylib: mach-o, but wrong architecture
나는에 연결하고 싶습니다 :
같은 dylib가 대상 컴퓨터에 존재하지만 다른 버전 (예를 들어, 스노우 레오파드 서버에 대한), 나는 다음과 같은 오류가 발생하는 경우
이 라이브러리는 로컬 복사본을 사용할 필요가 없습니다. 이것이 가능한가?bash-3.2# otool -L libmysqlclient.16.dylib libmysqlclient.16.dylib: libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 123.0.0) /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3) /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0) bash-3.2# install_name_tool -change libmysqlclient.16.dylib @executable_path/../Frameworks/libmysqlclient.16.dylib Usage: install_name_tool [-change old new] ... [-rpath old new] ... [-add_rpath new] ... [-delete_rpath old] ... [-id name] input bash-3.2# install_name_tool -change libmysqlclient.16.dylib @executable_path/../Frameworks/libmysqlclient.16.dylib libmysqlclient.16.dylib bash-3.2# otool -L libmysqlclient.16.dylib libmysqlclient.16.dylib: libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 123.0.0) /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3) /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
솔루션 내가 빌드 단계에 스크립트를 추가했다 : -
UPDATE 내가 install_name_tool을 사용하려고 할 때 어떤 변화가없는 install_name_tool -change libmysqlclient.16.dylib @ executable_path /../ Frameworks/libmysqlclient.16.dylib $ CONFIGURATION_BUILD_DIR/$ PRODUCT_NAME.app/Contents/MacOS/$ PRODUCT_NAME 이 제품은 실행 제품 용 libpath가 수정되어 lib 번들과 함께 잘 작동합니다.
libmysql.a를 사용한다면 - 동적 로딩없이 라이브러리에 코드가있을 것이므로 어떤 복사본도 만들 필요가 없다는 뜻입니까? – Alex
@Alex - 예, 정적 라이브러리를 사용하는 경우 바이너리에 링크됩니다. 그러나 라이브러리의 라이센스에주의하여 응용 프로그램을 오염시키지 않도록하십시오. 먼저 기본 버전이 GPL이기 때문에 MySQL의 LGPL 버전 중 하나를 사용해야합니다 : http://www.mysql.com/about/legal/licensing/index.html. LGPL 정적 라이브러리를 링크하는 경우 LGPL 라이센스를 준수하기 위해 응용 프로그램의 객체 파일을 릴리스해야 할 수 있습니다. 확률은 당신이 여기서 MySQL의 GPL 버전을 사용하고 있기 때문에 상업용 라이센스 비용을 지불해야합니다. –
tnx,하지만 난 말을하고 오류가있다 : dyld : 라이브러리가로드되지 않았습니다 : libmysqlclient.16.dylib 참조 :/사용자/맥/라이브러리/개발자/Xcode/DerivedData/snow-dnqbsbmaqlhtddanrxjajfdqlqtf/빌드/제품/디버그/스노우 server.app/Contents/MacOS/snow 서버 이유 : 이미지를 찾을 수 없습니다. 파일 복사 단계를 추가하고 libmysqlclient.16.dylib (대상 - 프레임 워크)를 추가하십시오. – Alex