/usr/lib/*.a从Solaris 10中删除了静态库?我是一个新的iOS开发人员.我有一个非常基本的怀疑.我在许多地方读过,我们需要发送我们的.h文件以及静态库的.a文件.
而.a文件是编译库,具有完整的实现,开发人员无法自己阅读,只是为了安全保护实现者代码.
我们需要.h文件来了解可用的公共功能.但是为什么Xcode不能解码.a文件并直接使用它而不是发送另一个.h文件.Xcode不需要向开发人员展示.a实现,而是可以向开发人员提供公开可用的方法.
我没有看到苹果没有这样做的任何合理原因.我相信运送.h文件肯定有充分理由.我想知道可能是什么原因?
我一直在Linux上构建一个静态库.到目前为止,它纯粹是自包含的,内部的所有代码都不使用标准库以外的任何代码.我最近做了一个更改,现在一些编译单元正在使用boost代码.我一直在使用以下内容构建库:
g++ -c -Wall -pedantic *.cpp
ar -cvq libbfclass.a *.o
Run Code Online (Sandbox Code Playgroud)
我的问题是:我是否有必要调整此方法来处理新库的使用,或者在构建使用我自己的库的可执行文件时是否需要提供链接库?从我的理解,静态库基本上只是一个目标文件的存档,但我想知道我是否需要修改我的构建脚本,以使一切正常工作,或者只有在构建可执行文件时才需要?
我正在研究一个项目,它是一个cocoa静态库,它使用了由其他人编写的C++库.这个C++库使用了C++ 11和libc ++(支持C++ 11的LLVM C++标准库).
我成功构建了可可库,但是当我在App中链接这个库时(只需在"Link Binary with Libraries"中添加链接).
发生错误,这是错误日志:
"non-virtual thunk to std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
"non-virtual thunk to std::__1::basic_iostream<char, std::__1::char_traits<char> >::~basic_iostream()", referenced from:
"non-virtual thunk to std::__1::basic_istream<char, std::__1::char_traits<char> >::~basic_istream()", referenced from:
"non-virtual thunk to std::__1::basic_istream<char, std::__1::char_traits<char> >::~basic_istream()", referenced from:
"non-virtual thunk to std::__1::basic_istream<wchar_t, std::__1::char_traits<wchar_t> >::~basic_istream()", referenced from:
"non-virtual thunk to std::__1::basic_istream<wchar_t, std::__1::char_traits<wchar_t> >::~basic_istream()", referenced from:
"non-virtual thunk to std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()", referenced from:
"non-virtual thunk to std::__1::basic_ostream<char, std::__1::char_traits<char> >::~basic_ostream()", referenced from:
"non-virtual thunk to std::__1::basic_ostream<wchar_t, std::__1::char_traits<wchar_t> >::~basic_ostream()", …Run Code Online (Sandbox Code Playgroud) 我有一个静态库X,它在C中.我有另一个静态库Y,它在目标C中,其.mm文件引用了库X的功能.现在在单个视图应用程序中我使用了库Y.但是在编译期间它发表错误说
Undefined symbols for architecture i386:
"encode()", referenced from:
_playMediaInternal in libXMedia.a(XMediaInternal.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
上面的编码函数存在于库X中,库Y正在使用它,单视图应用程序使用它.有什么建议 ?我在同一条线上看过其他查询,但没有运气.另一个线程链接
从Apple开发者网站我一直在尝试使用静态库链接.
我已将手机连接到Laptoop并已开始编译.它仍然给我错误.现在我觉得它与链接本身而不是架构有关
是的,我想知道有类似的东西吗?通常情况下,静态库将基于控制台,但我需要的是一个GUI库,用于假设HelloWorld MessageBox我helloworld() func在控制台应用程序中调用.
直截了当,我需要在控制台应用程序中集成一个GUI库(可能是插件 - 如果插件是一个.dll正确吗?好吧).
我试过看,Qt4 Plugin creation但我认为它仅适用于基于Qt的应用程序?请提供我的要求的任何链接.谢谢 ...
如果我在终端(在OSX Mavericks上)运行它,它可以正常工作:
lipo -create /Release-iphoneos/libMyNewLibrary.a /Release-iphonesimulator/libMyNewLibrary.a -output /Merged/libMyNewLibrary.a
Run Code Online (Sandbox Code Playgroud)
在终端中运行时我没有使用sudo.如果我将完全相同的代码添加到bash脚本,我会收到以下错误:
致命错误:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo:无法创建临时输出文件:/ libMyNewLibrary.a.lipo(Permission denied)
其余的bash脚本运行正常(使用xcodebuild生成ios和sim库),所以我不确定为什么lipo命令失败.要合并的2个库都存在于fato调用afaik之前(我看到这个错误的唯一帖子表明这可能是原因).
是否需要采取另一个步骤才能从bash脚本中使用lipo?
我一直在互联网上阅读并尝试过许多方法,但仍然似乎找不到问题。我正在尝试将libcurl用作静态lib,但这是我的编译器所说的:
1> libcurl.lib(cookie.obj):错误LNK2001:无法解析的外部符号__imp__fgets 1> libcurl.lib(netrc.obj):错误LNK2001:无法解析的外部符号__imp__fgets 1> libcurl.lib(cookie.obj):错误LNK2001:未解析的外部符号__imp__fputs 1> libcurl.lib(ftp.obj):错误LNK2001:未解析的外部符号__imp____stdio_common_vsscanf 1> libcurl.lib(rtsp.obj):错误LNK2001:未解析的外部符号__imp____stdio_common_vsscanf 1> libcurl。 :错误LNK2001:无法解析的外部符号__imp____stdio_common_vsscanf 1> libcurl.lib(http_proxy.obj):错误LNK2001:无法解析的外部符号__imp____stdio_common_vsscanf
等等..
我已经将CURL_STATICLIB添加到预处理器,甚至与以下库链接:libcurl.lib openssl.lib,libssh2.lib,zlib.lib,wsock32.lib,wldap32.lib,ws2_32.lib,但这些都不起作用。
我真的很想将其用作静态库(程序文件夹中没有.dll),所以如果有人可以帮助我,我将不胜感激!
PS。我正在使用VS2015
我收到链接器错误,指示链接器无法打开文件(静态库),因此失败.我正在非常困难地排除此错误,因为我从未告诉链接器链接到它无法打开的文件.
我告诉链接器链接到几个静态库.我链接的许多库都是wxWidgets静态库.我不需要来自wxWidgets的所有模块,因此有一些我链接到的和许多我不是.链接器无法打开的文件是'wxbase31ud_net.lib'.就像我说的那样,该文件不在我链接的库中.我的直接想法是,这种依赖性是以某种方式隐式引入的,可能是我链接到的一个wxwidgets库.我不认为静态链接是这样工作的,但我没有任何其他想法.我一直在研究这种可能性,但我没有发现任何迹象表明情况.
什么可能导致链接器尝试打开此文件?
编辑:另外,要清楚,我看到的错误是LNK1104
所以我有一个静态类让我们说它叫做Worker,并且让我说它里面有一个名为Wait(float f)的方法,所有公共所以我可以在任何地方访问它,如下所示:
Worker.Wait(1000);
Run Code Online (Sandbox Code Playgroud)
现在我想知道有什么方法可以定义某种独特的特殊方法,所以我可以像这样做:
Wait(1000);
Run Code Online (Sandbox Code Playgroud)
(没有在课堂上我会使用它)?
static-libraries ×10
c++ ×4
ios ×4
linker ×2
c# ×1
c++11 ×1
curl ×1
g++ ×1
libcurl ×1
linux ×1
lipo ×1
macos ×1
objective-c ×1
qt ×1
solaris-10 ×1
visual-c++ ×1
wxwidgets ×1
xcode ×1
xcodebuild ×1