我正在尝试使用Visual Studio 2015 RC编译共享对象(.so)。
我在stdafx.h中链接Opus Codec库:
#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。
编辑:如果有人愿意看一下,我上传了我的小示例项目here。
答案 0 :(得分:1)
首先,Opus Codec发行版附带Visual Studio项目,这些项目被配置为仅构建不是跨平台的Windows库。您需要使用跨平台库项目替换这些项目。或更好的替代方案只需下载预建的 libopus.a ,例如来自here。
其次,您不能在跨平台项目中使用#pragma comment(lib, ...)
。而是将库依赖项添加到项目属性:将opus
添加到配置属性 - >链接器 - >输入 - >图书馆依赖;还将包含 libopus.a 的文件夹的路径添加到配置属性 - >链接器 - >一般 - >其他图书馆目录。
第三,看起来你试图通过将某个版本的clang.exe放在项目的根目录中来使用它(链接器错误显示了这一点)。一定是非常错误的。相反,您需要使用Android NDK附带的Clang。 (确保NDKROOT环境变量指向Android NDK安装的根目录。)
答案 1 :(得分:0)
使用clang for windows是fairly new,因此大多数时候人们谈论clang时,他们在使用.a
和.so
的Unix,Linux或BSD类型系统上使用它文件而不是.lib
和.dll
个文件。
在您上传的示例中,您为库和项目使用了不同的工具集:
Clang is actually able to use vs2015 libs, when using the Visual C++ linker.但是,您的项目MySharedObject似乎使用Android NDK r10d工具链。
我最好的猜测是改变其中一个项目以匹配另一个项目的工具链/工具集。