标签: static-libraries

为iPhone创建静态库

有一个开源库,我想用于我的iPhone应用程序.该库是用C语言编写的,并使用Makefile编译.我想使用静态库.

如果我将.a文件添加到我的项目依赖项中,它可以很好地与模拟器一起使用,但是在定位iPhone SDK时它不会链接(当然因为.a文件是为Intel平台编译的).

我应该使用哪些GCC编译器标志来编译iPhone SDK的静态库?我认为'-arch'选项会为我提供一个iPhone架构,但没有运气.

任何帮助,将不胜感激.

iphone xcode static-libraries

16
推荐指数
2
解决办法
1万
查看次数

如何将动态DLL转换为静态库?

我写了一个程序helloworld.exe; 这取决于a.dll.我没有a.dll的源代码,这是一个动态的dll.如何将其更改为静态库,以便将其链接到helloworld.exe?

c++ dll linker static-libraries

16
推荐指数
2
解决办法
1万
查看次数

我如何为armv6,armv7和i386编译静态库(fat)

我知道这个问题已多次提出,但我的目标与我在网上搜索的内容略有不同.具体来说,我已经能够为iPhone构建一个静态库,但我能够构建的最终胖文件只包含arm和i386架构(我不确定arm指的是:是v6还是v7?).我无法专门为armv6和armv7编译,他们使用lipo合并两个架构.lipo工具抱怨armv6和armv7库中存在相同的架构(arm,而不是armv6或armv7).

有人可以解释如何构建armv6和armv7,他们使用lipo将这些库合并为一个胖文件?

编辑:我需要构建不使用Xcode,而是直接编译传统的unix库.

iphone xcode static-libraries fat-binaries universal-binary

16
推荐指数
2
解决办法
3万
查看次数

IOS静态库产品总是红色的

我几天来一直在努力解决这个问题.当我在XCode 4中的IOS下创建一个新的静态库项目时,我遇到了一个问题.无论是否将文件添加为标题或进行编译,我都能成功构建,但.a文件始终为红色.这在Debug和Release中都会发生.我已经阅读过类似的问题,但没有找到解决问题的人.任何帮助,将不胜感激.谢谢

iphone static-libraries ios xcode4

16
推荐指数
2
解决办法
5478
查看次数

静态库如何链接到依赖项?

说我有libA.它取决于例如libSomething,因为libA的非内联方法调用了libSomething.h中的方法.在这种情况下,依赖关系如何链接?libA在编译时是否必须静态链接到libSomething,或者libA(使用libA的应用程序)的用户是否需要链接到libA和libSomething?

谢谢

c c++ linker static-libraries

16
推荐指数
3
解决办法
2万
查看次数

未定义引用`inflate'

试图链接我用MinGW构建的静态assimp库.以下是我得到的错误:

H:\ ovgl\ovgl ...\dependencies\Assimp\lib\libassimp.a(BlenderLoader.cpp.obj):BlenderLoader.cpp :(.text + 0xd91):未定义引用inflateInit2_' H:\ovgl\ovgl\.\..\dependencies\Assimp\lib\libassimp.a(BlenderLoader.cpp.obj):BlenderLoader.cpp:(.text+0xe06): undefined reference to膨胀'H:\ ovgl\ovgl. ..\dependencies\Assimp\lib\libassimp.a(BlenderLoader.cpp.obj):BlenderLoader.cpp :(.text + 0xf72):未定义引用inflateEnd' H:\ovgl\ovgl\.\..\dependencies\Assimp\lib\libassimp.a(XGLLoader.cpp.obj):XGLLoader.cpp:(.text+0x76c): undefined reference toinflateInit2_'H:\ ovgl\ovgl ...\dependencies\Assimp\lib\libassimp.a(XGLLoader.cpp.obj):XGLLoader.cpp :(.text + 0x7ff):对inflate' H:\ovgl\ovgl\.\..\dependencies\Assimp\lib\libassimp.a(XGLLoader.cpp.obj):XGLLoader.cpp:(.text+0x953): undefined reference toinflateEnd'H:\ ovgl\ovgl ...\dependencies\Assimp\lib\libassimp.a(XFileParser )的未定义引用.cpp.obj):XFileParser.cpp :(.text + 0x9ac):未定义的引用inflateInit2_' H:\ovgl\ovgl\.\..\dependencies\Assimp\lib\libassimp.a(XFileParser.cpp.obj):XFileParser.cpp:(.text+0xd5c): undefined reference to膨胀'H:\ ovgl\ovgl ...\dependencies\Assimp\lib\libassimp.a(XFileParser.cpp.obj):XFileParser .cpp :(.text + 0xed2):对inflateReset' H:\ovgl\ovgl\.\..\dependencies\Assimp\lib\libassimp.a(XFileParser.cpp.obj):XFileParser.cpp:(.text+0xef8): undefined reference toinflateSetDictionary的未定义引用'H:\ ovgl\ovgl ...\dependencies\Assimp\lib\libassimp.a(XFileParser.cpp.obj):XFileParser.cpp :(.text + 0xf52):未定义的引用inflateEnd' H:\ovgl\ovgl\.\..\dependencies\Assimp\lib\libassimp.a(XFileParser.cpp.obj):XFileParser.cpp:(.text+0x1b4a): undefined reference toinflateInit2_'H:\ ovgl\ovgl ...\dependencies\Assimp\lib\libassimp.a(XFileParser.cpp.obj):XFileParser.cpp :(.text + 0x1efa):对inflate' H:\ovgl\ovgl\.\..\dependencies\Assimp\lib\libassimp.a(XFileParser.cpp.obj):XFileParser.cpp:(.text+0x2070): undefined reference to …

c++ static-libraries

16
推荐指数
1
解决办法
3万
查看次数

在构建期间将静态库链接到共享库?

我在使用GCC/Linux构建共享库时遇到问题.目前这个共享库是使用GCC/libtool选项"-shared"创建的,一切都很好.

现在还有两个额外的静态库(.a文件)必须添加到此共享库中,因为它们提供了共享库所需的一些功能.使用选项"-l"添加这些静态库没有帮助,之后它们不是.so文件的一部分.

那么我如何强制GCC/libtool真正将这些静态库的代码添加到共享库中呢?

谢谢!

linux gcc shared-libraries static-libraries libtool

16
推荐指数
1
解决办法
3万
查看次数

为什么有些DLL文件需要额外的.lib文件才能进行链接?

我有关于库链接和.lib文件的问题...

这是背景:

  • OS = Windows
  • IDE = QT

我创建了一个DLL:MyLib.dll.
要在我的QT项目中使用该库,我只需要包含一个包含路径,一个指向库的链接并使用头文件:

LIBS += "C:\myPath\MyLib.dll"
INCLUDEPATH += "C:\myPath"
HEADERS += \
    ../myPath/MyLib_global.h \
    ../myPath/mylib.h
Run Code Online (Sandbox Code Playgroud)

我在我的项目中使用第三方DLL:third.dll
如果我执行与上面示例相同的操作,则它不起作用:

LIBS += "C:\myPath\third.dll" 
Run Code Online (Sandbox Code Playgroud)

第三方DLL附带.lib文件"third.lib",我显然需要与DLL一起使用.

这是为什么?为什么有些DLL库需要.lib文件,但其他DLL库却不需要?
可能是.lib是一个访问DLL的静态库吗?

非常感谢!

dll qt shared-libraries dynamic-linking static-libraries

16
推荐指数
2
解决办法
4785
查看次数

链接错误:在32位arm处理器上的Ubuntu 12.04上找不到"-ltinfo"

当我使用ncurses为一个运行在手臂上的Ubuntu 12.04编译一个小函数时,我收到以下链接错误.错误是

arm-linux-gnueabihf/bin/ld: cannot find -ltinfo
Run Code Online (Sandbox Code Playgroud)

关于要安装的内容有很多提示,但我似乎无法找到任何可以为我的arm框设置技巧的软件包.

我已经做好了

sudo apt-get install libncurses5-dev
Run Code Online (Sandbox Code Playgroud)

这不包含tinfo库.其他建议通常导致库"不可用,但由另一个包引用"或"没有安装候选".

所有帮助表示赞赏

/亨里克

c++ ubuntu arm static-libraries ubuntu-12.04

16
推荐指数
2
解决办法
9659
查看次数

将跨平台C++库移植到Windows Phone 8平台

我搜索过网络和StackOverflow很多,但似乎无法找到我以下问题的明确答案.

语境:

我希望移植一组C++帮助程序库,以便与Windows Phone 8(WP8)平台一起使用.从历史上看,这些库是作为静态库(而不是DLL)构建的.

我已成功编写了特定于WP8的代码,因此使用WP8可用的API(使用WP API QuickStart doc作为参考点),库与ARM兼容并构建.由于必须用WinRT的ThreadPool替换经典的Win32 Thread调用,因此只有一个库(例如Lib1)需要使用WinRT扩展(/ ZW标志).

构建Lib1时,我收到以下警告:警告1警告LNK4264:将使用/ ZW编译的目标文件归档到静态库中; 请注意,在创作Windows运行时类型时,建议不要使用包含Windows运行时元数据的静态库进行链接.

- 搜索此警告,我发现这篇文章,指出:"如果您使用创建公共引用类,公共接口类或公共值类的静态库,链接器会引发此警告.如果静态,您可以安全地忽略警告库不会生成在库本身之外使用的Windows运行时组件.静态库中的公共组件将编译但不会在运行时激活.任何打算供其他组件或应用程序使用的Windows运行时组件必须在动态中实现-link library(DLL)."

在Lib1中,ClassA包含使用WinRT ThreadPool调用的函数.ClassA调用ClassA函数,它们只是将常规HANDLE和DWORD返回给ClassB.

代码示例:

// ClassA.cpp
HANDLE WINAPI ClassA::CreateThread(/* Params that are usually passed to Win32 CreateThread */)
{
    // Do WinRTThreadPool stuff to create WorkItem
    auto workItem = ref new Windows::System::Threading::WorkItemHandler([=](Windows::Foundation::IAsyncAction^)
    // More code that eventually results in a Win32 Handle

    return handle;
}

// ClassB.cpp
Handle handle = ClassA::CreateThread(/* Params that are usually passed to Win32 CreateThread */);
Run Code Online (Sandbox Code Playgroud)

ClassA的函数只能由ClassB从Lib1中调用,然后ClassB可以被链接Lib1的应用程序使用.

最后,对我的问题: …

c++ cross-platform static-libraries windows-runtime windows-phone-8

15
推荐指数
1
解决办法
2903
查看次数