我正在与SDL合作开展一个项目。我觉得我的很多代码可以/应该可以重用于我可能想要承担的任何其他项目。
我打算开始一个图书馆项目,但我不知道如何连接到SDL库。
通常,我转到项目设置并编辑Mingw32 Linker以包含库(ming32,SDLmain和SDL)。但链接器不会显示在设置中。
所以我的问题:
是否没有链接器设置,因为构建库只是一个编译操作?
总的来说,是否可以在现有库之上构建库?也就是说,使用SDL函数和stucts编写我的库。或者我是否必须获取源代码并完全重建我的代码?
此外,在此实例中有关共享与静态的建议吗?
(另外,关于在哪里学习更多关于编译器和链接器等的任何建议。我在学校通过了数据结构,但没有更远)
答案 0 :(得分:2)
您正在构建的库可以具有外部依赖性。这意味着您可以将其与SDL或您喜欢的任何其他外部库链接。
我认为此页面会解释您的所有其他问题:DLL Creation in MingW
答案 1 :(得分:2)
作为介绍,你必须区分非常好的静态库和动态库,它们是完全不同的野兽......对你的问题说:
是否没有链接器设置,因为构建库只是一个编译操作?
我猜你在这种情况下正在创建一个静态库。静态库只是构成源树的所有单个目标文件(即编译器生成的.o
文件)的单个目标文件中的集合。不多也不少。
使用静态库,您无需指定哪些是依赖项,因为可以理解,在编译最终可执行文件时,您的库将与其依赖的所有其他库链接。因此,只有在那个时候(最终的可执行构建)才会检测到任何缺失的符号,并且所有其他库都必须可用。
共享库(也是动态库)是一个可执行文件,它嵌入了它所依赖的所有静态库。它还可以与其他共享库具有外部依赖关系,而这些共享库不会被嵌入。
总的来说,是否可以在现有库之上构建库?也就是说,使用SDL函数和stucts编写我的库。或者我是否必须获取源代码并完全重建我的代码?
对于静态库和动态库都是完全可能的。
此外,在此实例中有关共享与静态的建议吗?
在这种情况下,无法提供建议,因为您没有指定足够的信息。 请看这个:When to use dynamic vs. static libraries和this,以获得一种指导方针。
(另外,关于在哪里学习更多关于编译器和链接器等的任何建议。我在学校通过了数据结构,但没有更远)
我认为上面的两个链接为您提供了大量信息。如果您想进一步了解详情,可以从this wikipedia article开始,然后从那里浏览。