簡體   English   中英

在Visual Studio 2015中進行跨平台構建時鏈接到第三方庫

[英]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類型的系統上使用它。

在您上載的示例中,您對庫和項目使用了不同的工具集:

  • opus庫是使用vs2015工具集(v140)構建的
  • 您的項目MySharedObject是使用clang(Clang_3_4)構建的

使用Visual C ++鏈接器時,Clang實際上能夠使用vs2015庫。 但是,您的項目MySharedObject似乎使用了Android NDK r10d工具鏈。

我最好的猜測是更改一個項目以匹配另一個項目的工具鏈/工具集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM