我正在与 SDL 合作开展一个项目。 我觉得我的很多代码可以/应该可重用于我可能想要承担的任何其他项目。
我打算启动一个库项目,但我不知道如何链接到 SDL 库。
通常,我会转到“项目设置”并编辑 Mingw32 Linker 以包含库(ming32、SDLmain 和 SDL)。 但链接器没有显示在设置中。
所以我的问题:
是不是因为构建库只是一个编译操作,所以没有链接器设置?
一般来说,是否可以在现有库的基础上构建一个库? 也就是说,使用 SDL 函数和结构编写我的库。 或者我是否必须获取源代码并完全重建包含我的代码?
此外,在这种情况下,关于共享与静态的建议吗?
(另外,关于在哪里学习更多关于编译器和链接器等的建议。我在学校学过数据结构,但没有进一步)
作为介绍,您必须很好地区分静态库和动态库,它们是完全不同的野兽......对您的问题说:
是不是因为构建库只是一个编译操作,所以没有链接器设置?
我猜您在这种情况下正在创建一个静态库。静态库只是构成源树的所有单个对象文件(即编译器生成的
.o
文件)在一个对象文件中的集合。不多也不少。
使用静态库,您不需要指定哪些依赖项,因为众所周知,在编译最终的可执行文件时,您的库将与其依赖的所有其他库链接。因此,只有在那时(最终的可执行版本)才会检测到任何丢失的符号,并且所有其他库都必须可用。
共享库(也称为动态库)是一个可执行文件,嵌入了它所依赖的所有静态库。它还可以与其他共享库具有外部依赖关系,而这些共享库不会被嵌入。
一般来说,是否可以在现有库的基础上构建一个库?也就是说,使用 SDL 函数和结构编写我的库。或者我是否必须获取源代码并完全重建包含我的代码?
对于静态库和动态库来说,这是完全可能的。
此外,在这种情况下,关于共享与静态的建议吗?
在这种情况下,无法提供建议,因为您没有指定足够的信息。 看看这个:何时使用动态库和静态库,以及this,以获得某种指导。
(另外,关于在哪里学习更多关于编译器和链接器等的建议。我在学校学过数据结构,但没有进一步)
我认为上面的两个链接为您提供了大量信息。如果您想进一步了解详细信息,您可以从这篇维基百科文章开始并从那里浏览。
您正在构建的库可以具有外部依赖项。这意味着您可以将其与 SDL 或您喜欢的任何其他外部库链接。
我认为此页面解释了您所有其他问题:MingW 中的 DLL 创建