有没有什么好的方法来制作小型的haskell可执行文件? 用ghc6,一个简单的hello世界程序似乎达到了370kB(523kB之前)。 C中的Hello world约为4kB(带前9kB)。
我从这里使用mingw: http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.7.2/32-bit/threads-posix/sjlj/x32-4.7.2-release-posix-sjlj-rev2.7z/download : http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.7.2/32-bit/threads-posix/sjlj/x32-4.7.2-release-posix-sjlj-rev2.7z/download 我成功地通过使用-static-libgcc -static-libstdc++参数成功地链接了静态的libstdc++-6.dll和libgcc_s_sjlj-1.dll ,但是我找不到一个和libwinpthread-1.dll一样的命令。
我想控制在CMake中find/链接到我的二进制文件的types。 最终的目标是“尽可能静态地生成二进制文件”,即静态链接到每个具有静态版本的库。 这一点非常重要,因为在testing过程中可以在不同的系统上移植二进制代码。 ATM似乎很难实现FindXXX.cmake包,或者更确切地说find_library命令总是在静态和dynamic都可用的时候selectdynamic库。 关于如何实现这个function的技巧 – 最好以一种优雅的方式 – 非常受欢迎!
我已经在网上阅读,下面的组合存在: 专有源代码+ GPL源代码 – > GPL源代码(所有代码必须在GPL下发布) 专有的源代码+ LGPL源代码 – >专有的源代码(所有代码保持专有) 现在如何静态/dynamic链接GPL和LGPL代码与上述组合工作?
编译共享对象时遇到了很多问题,这些对象与静态库静态链接。 这个问题只出现在x84_64平台上。 当在x86_32上做同样的编译工作时,我没有任何问题。 也许这是一个操作系统特定的GCCconfiguration的事情,但我的研究表明,它的GCC如何在x86_64平台上工作。 无论如何,我在Ubuntu 10.04 x86_64上使用gcc 4.4.3。 问题是如何解决的?确保所有的静态库依赖关系都是用-fPIC编译的。 问题1: -fpic和-fPIC(显然-fPIC在x86上生成更多指令)有什么区别? 为什么后面的types在x86_64上下文中更相关? 问题2:我的假设是,当链接到静态代码时,您在链接时将函数硬连接到二进制文件,为什么它需要“位置独立代码”机制提供的间接级别? 问题3:现在,如果x86不需要-fpic / -fPIC来将共享对象与静态归档链接起来,为什么在x86_64中需要它? 问题4:即使需要,为什么不提供隐含的? 我认为改变应该是一个很大的禁忌
最近,我切换到Xcode4,当我编译我的项目,我得到以下错误。 ld: warning: ignoring file /Users/myname/Library/Developer/Xcode/DerivedData/appname-hezrgyqimckztgbdlslkavphdclw/Build/Products/Debug-iphoneos/libTapkuLibrary.a, file was built for archive which is not the architecture being linked (armv6) Undefined symbols for architecture armv6: "_OBJC_CLASS_$_TKLoadingView", referenced from: objc-class-ref in RootViewController.o 我打开了TapkuLibrary,并检查它的架构设置为“标准(armv6 armv7)”。 我能做些什么来解决这个问题?
我有一个名为libunp.a的静态库文件,我知道我可以使用gcc -lunp xx链接到库。 我可以使用#pragma comment(lib,"xxx.lib")告诉Microsoft C / C ++编译器包含这个库; 我怎么能在Linux / GCC下做到这一点?
我不得不承认,随着iOS 8的发布,我对iOS中的dynamic和静态框架感到困惑。 我正在寻找一种方式来分发我创build的库,我需要支持iOS 7及以上版本。 (注:这将是一个专有的框架,我不能使用cocoa豆荚,我也不能分发源)。 这是我已经知道的; iOS 8为iOS引入了“embedded式框架”,但据我所知,它们不适用于iOS 7,仅适用于iOS 8及以上版本。 我可以select将我的库作为静态库(.a文件)分发,也可以分发头文件。 我知道这是处理这种情况的一种常见方式,但是我希望find一些比这更简单的方法(如果可能的话,也可以把一些资源捆绑在一起)。 我还发现,iOS 7不支持dynamic.framework库(只有静态),因为它不支持dynamic链接。 但是iOS 8,以及静态链接。 这是关于这个信息的问题。 我看到我可以通过将Mach-Otypes改为“静态库”来创build一个.framework目标,并将其设置为静态。这足以支持iOS 7而不会出现任何问题,并且还可以将我的库作为.framework bundle?如果是这样的话,为什么iOS 8中的“embedded式框架”这么重要,因为互联网上的许多资源都是这样build议的?我错过了什么? 是否有必要像我做任何其他应用程序一样对.framework进行编码签名? 如果我需要在我的.framework文件中包含其他资源(如核心数据或图像),该怎么办? 我需要为此创build一个单独的.bundle文件吗? 我已经search了互联网和苹果公司的文档以find答案,但是我发现的信息并没有给我一个直接的答案。 比你提前。
我在C ++中使用静态方法有点麻烦 例如.h: class IC_Utility { public: IC_Utility(); ~IC_Utility(); std::string CP_PStringToString( const unsigned char *outString ); void CP_StringToPString( std::string& inString, unsigned char *outString, short inMaxLength ); static void CP_StringToPString( std::string& inString, unsigned char *outString); void CP_StringToPString( FxString& inString, FxUChar *outString); }; 示例.cpp: static void IC_Utility::CP_StringToPString(std::string& inString, unsigned char *outString) { short length = inString.length(); if( […]
事实上,Linux上的静态 gcc标志现在不起作用。 让我引用GNU libc FAQ: 2.22。 即使静态链接程序需要一些共享库,这是我不能接受的。 我能做什么? 如果没有共享库,{AJ} NSS(仅仅input`info libc“Name Service Switch”')将无法正常工作。 NSS允许通过更改一个configuration文件(/etc/nsswitch.conf)而不用重新连接任何程序来使用不同的服务(例如NIS,文件,db,hesiod)。 唯一的缺点是现在静态库需要访问共享库。 这是由GNU C库透明地处理的。 一个解决scheme是使用–enable-static-nssconfigurationglibc。 在这种情况下,您可以创build一个只使用服务dns和文件的静态二进制文件(为此更改/etc/nsswitch.conf)。 您需要明确链接所有这些服务。 例如: gcc -static test-netdb.c -o test-netdb \ -Wl,–start-group -lc -lnss_files -lnss_dns -lresolv -Wl,–end-group 这种方法的问题是,你必须链接每个使用NSS例程的静态程序和所有这些库。 {UD}实际上,我们不能说使用这个选项编译的libc正在使用NSS。 没有开关了。 因此, 强烈build议不要使用–enable-static-nss,因为这会使系统上的程序行为不一致。 关于这个事实,现在有没有什么合理的方法来在Linux上创build一个全function的静态构build,或者静态链接在Linux上完全失效? 我的意思是静态构build: 行为与dynamic构build完全相同(static-nss具有不一致的行为是邪恶的! 适用于glibc环境和Linux版本的合理变体;