过去几个月我已经写了一些很好的通用足够的功能,我想建立一个图书馆和链接的动态对抗,而不是进口的50-奇怪的头/来源的文件。

该项目是维持在低和Dev-C++(我不明白,我可能要去命令行做我想做的)并有链接,对照片和SDL(动态在SDL的情况下)。目标平台Windows和OS X.

我看到的是什么呢?

  • 会是什么样的入口点我的 库,如果它需要一个吗?
  • 我有什么变化,在我的代码?(呼吁公约?)
  • 我怎么放?我的理解 这是标题和编制 库(.dll.dylib(,.框架), 不管它会)需要 可用于项目 尤其是作为模板功能 不能包括在图书馆 性质。
  • 还有什么我需要知道的吗?
有帮助吗?

解决方案

我建议作为一个statc库,而不是一个DLL。一个很大的问题的出口C++的职能和类别走开,如果这样做,只要链接码生产的同一编译成的库。

建立一个静态的图书馆是很容易的,因为它只是一个集合.o/。obj文件-有点像一个压缩文件,但没有压缩。没有必要出口什么-只是包括图书馆在列表的文件应用程序的链接。访问的具体功能或班级,只是包括相关的标题的文件。注意你不能摆脱头文件-C++编制的模型,特别是对模板,取决于他们。

其他提示

它可以是有问题的出口C++类图书馆从一个动态的图书馆,但这是可能的。
你需要标记的每个功能出口从DLL(法取决于compiler).我闲逛看到,如果我可以找到如何做到这一点从载。在VC它的声明影响(dllexport)和在CodeWarrior它#pragma出口/#pragma出口关闭。

这是完全合理的,如果你只是用你的二元。然而,一个问题是,C++方法是不同的名称,由不同的编译器。这意味着,没有人使用一个不同的编译器,将能够使用DLL,除非你是只出口C功能。

此外,需要确保调公约的相匹配的DLL和DLL的客户。这要么意味着你应该有相同的 默认的 呼吁《公约》的通过标志的编译为DLL或客户,或者更好,明确设置呼叫《公约》在每个出口功能的问题,所以它不会管什么默认的是为客户。

这篇文章说明了命名问题:http://en.wikipedia.org/wiki/Name_decoration

C++标准并不界定一个标准的阿比,这是坏消息对人们试图建立C++库。这意味着你得到的不同的行为,从你的编码的根据的标志使用汇编,这可以导致神秘的错误代码汇编和链接。

这延伸超出了只是不同的电话公约-C++的代码可以汇编以支持或不支持RTTI、例外处理,并与各种优化可以影响存储器内布局类实例,这C++码的依赖。

那么,你能做些什么?我将建立C++库在我源树,并确保他们建立的一部分作为我的项目的建立,所有的图书馆和代码链接到它们使用同一个编译器的标志。

注意,名称重整,这是应该至少防止你联系对象的文件,汇编了不同的编纂者/compiler标志的唯一主要工作,并有某些事情可以做,特别是与海湾合作委员会,这将导致代码链接就好,并且未在运行时间。

你必须额外的小心供应商提供的动态C++库(脱上最Linux发行版本,例如。) 我已经看到情况的供应商提供的图书馆,汇编的方式,防止某些事情的正常工作。例如,一些Redhat Linux发行版(也许所有的人)无障碍的例外情况在脱,这使得它不可能赶上的例外情况在主要()如果在例外情况被扔在一夸脱回调。乐趣。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top