[英]Linking against third-party libraries when doing cross-platform build in Visual Studio 2015
我正在嘗試使用Visual Studio 2015 RC編譯共享對象(.so)。
我在stdafx.h中鏈接Opus編解碼器庫:
#pragma comment(lib, "..\\..\\opus-1.1-beta\\win32\\VS2010\\Win32\\Debug\\celt.lib")
#pragma comment(lib, "..\\..\\opus-1.1-beta\\win32\\VS2010\\Win32\\Debug\\opus.lib")
#pragma comment(lib, "..\\..\\opus-1.1-beta\\win32\\VS2010\\Win32\\Debug\\silk_common.lib")
#pragma comment(lib, "..\\..\\opus-1.1-beta\\win32\\VS2010\\Win32\\Debug\\silk_fixed.lib")
#pragma comment(lib, "..\\..\\opus-1.1-beta\\win32\\VS2010\\Win32\\Debug\\silk_float.lib")
我收到鏈接器錯誤:
鏈接器命令失敗,退出代碼為1(使用-v查看調用)SharedObject1 C:\\ Users \\ MyUser \\ Documents \\ Visual Studio 2015 \\ Projects \\ SharedObject1 \\ SharedObject1 \\ clang.exe 1
有人可以告訴我如何調查那里可能出了什么問題嗎? 我在哪里注明“ -v”?
在跨平台項目中使用.libs是不行的嗎? 我想知道為什么每個人都談論.a文件,.so,卻從來沒有談論.libs。
編輯:如果有人願意看看,我已經在這里上傳了我的小型示例項目。
首先,Opus Codec發行版附帶了Visual Studio項目,這些項目配置為僅構建Windows庫,而不跨平台。 您需要用跨平台庫項目替換這些項目。 或更好的選擇:只需從此處下載預構建的libopus.a即可 。
其次,您不能在跨平台項目中使用#pragma comment(lib, ...)
。 而是將庫依賴項添加到項目屬性中:在配置屬性->鏈接器->輸入->庫依賴項中添加opus
。 還將包含libopus.a的文件夾的路徑添加到配置屬性->鏈接器->常規->其他庫目錄。
第三,看起來您正在嘗試通過將clang.exe放置在項目的根目錄中來使用它(您的鏈接器錯誤顯示了此信息)。 這一定是非常錯誤的。 相反,您需要使用Android NDK隨附的Clang。 (確保NDKROOT環境變量指向Android NDK安裝的根目錄。)
在Windows上使用clang是一個相當新的事物 ,因此大多數時候人們在談論clang時,他們會在使用.a
和.so
文件而不是.lib
和.dll
文件的Unix,Linux或BSD類型的系統上使用它。
在您上載的示例中,您對庫和項目使用了不同的工具集:
使用Visual C ++鏈接器時,Clang實際上能夠使用vs2015庫。 但是,您的項目MySharedObject似乎使用了Android NDK r10d工具鏈。
我最好的猜測是更改一個項目以匹配另一個項目的工具鏈/工具集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.