2011-07-16 49 views
0

我在Xcode中使用info.plist來設置環境變量DYLD_LIBRARY_PATH和DYLD_FRAMEWORK_PATH。info.plist中的環境變量不起作用

我設置DYLD_LIBRARY_PATH到

$ CONTENTS_FOLDER_PATH /運行/ 1.1.0:$ CONTENTS_FOLDER_PATH /模塊/ tiapp/1.1.0:$ CONTENTS_FOLDER_PATH /模塊/ ticodec/1.1.0:$ CONTENTS_FOLDER_PATH /模塊/ tidatabase /1.1.0:$CONTENTS_FOLDER_PATH/modules/tifilesystem/1.1.0:$CONTENTS_FOLDER_PATH/modules/timedia/1.1.0:$CONTENTS_FOLDER_PATH/modules/timonkey/1.1.0:$CONTENTS_FOLDER_PATH/modules/tinetwork/1.1.0:$ CONTENTS_FOLDER_PATH /模塊/ tiplatform/1.1.0:$ CONTENTS_FOLDER_PATH /模塊/ tiprocess/1.1.0:$ CONTENTS_FOLDER_PATH /模塊/ tiui/1.1.0:$ CONTENTS_FOLDER_PATH /模塊/ tiworker/1.1.0

DYLD_FRAMEWORK_PATH到

$ CONTENTS_FOLDER_PATH /運行/ 1.1.0

當我雙擊我的.app文件夾的dlopen無法找到任何我的名爲.dylib了在文件夾上面提到的。

如果我採用相同的確切變量和路徑,並將它們放在Xcode中的可執行參數中,一切正常,但只有當我通過Xcode運行軟件,並且在單擊.app時需要一切工作。夾。

我在做什麼錯誤的info.plist?它不喜歡$ CONTENTS_FOLDER_PATH嗎?它需要一個不同的分隔符嗎?爲什麼相同的參數在可執行參數中工作,但不在info.plist文件中?

在此先感謝。

回答

0

我最終使用@rpath來查找所有的dylib和框架。我用@ rpath/-name的庫或框架的名稱重新安裝了所有框架和庫。

然後我在主要項目運行搜索路徑設置添加像@loader_path /../運行/ 1.1.0和@loader_path相對路徑名/../模塊/等..

這使得dlopen調用不使用plist或可執行參數來查找當前路徑。

2

您在Info.plist中使用什麼鍵來設置環境變量?你的意思是你在Xcode的「環境變量」配置中設置環境變量(Xcode 4中Scheme的一部分,Xcode 3中的自定義可執行文件的一部分),或者你的意思是你只是將鍵/值放入Info.plist以及期待他們出現在環境中?

在前一種情況下,即使此功能有效,它只會在您運行Xcode時有用,而不是在您運送產品時使用。在後一種情況下,Info.plist沒有用於添加環境變量的機制。

個人,而不是在你的包這個巨大的樹,我有Xcode中拷貝所有dylibs到你的包的插件目錄(PlugIns),然後使用NSBundle(或CFBundle)得到它的路徑。或者,如果這些目錄不是真正的「插件」,則可以使用其他目錄。但是把它們全部放在你的包中的一個目錄中。不要搜索它們。 (你可以自由地將它們放在源代碼樹中的許多目錄中;這純粹是關於捆綁包的。)

+0

我使用的是Xcode 3,並且我將info.plist變量設置爲「Environment Variables」,實際上是將info.plist顯示爲LSEnvironment。我可以在我的包中找到我的每個.dylib的直接路徑,但問題在於.dylibs本身依賴於其他.dylib,所以當我進行dlopen調用並且加載.dylib使用環境變量DYLD_LIBRARY_PATH來查找路徑到它依賴的其他.dylibs,所以我需要在應用程序打開之前將路徑從我的包附加到DYLD_LIBRARY_PATH變量。我需要這個工作,以便應用程序也可以。 –

+0

類似於CONTENTS_FOLDER_PATH的Xcode構建變量在運行時不可用於啓動服務。我會開始尋求一個更簡單的鏈接系統,理想情況下是一個靜態鏈接系統。否則,你需要在你的代碼中設置DYLD_LIBRARY_PATH,如果這是不可能的,你將需要建立一個助手可執行文件,根據你的包的位置爲你設置它,然後啓動你的真實可執行文件。所有這些都是過於複雜的方法,靜態鏈接是強烈的首選。 –

+0

我不認爲靜態鏈接是我現在的選擇。謝謝你的建議。事實上,當前的設計是讓應用程序的第一次運行設置環境變量,然後再次啓動相同的可執行文件,然後設置環境變量,就像您的構建幫助者的建議。我試圖避免這種方法,並希望只執行一次應用程序,以便讓每個人都更輕鬆。 –