c++ - 在另一个库(SDL 和 Eclipse)之上构建一个新库

标签 c++ compiler-construction eclipse-cdt

我正在使用 SDL 开展一个项目。我觉得我的很多代码可以/应该可以重用于我可能想要承担的任何其他项目。

我打算开始一个图书馆项目,但我不知道如何链接到 SDL 图书馆。

通常,我会转到“项目设置”并编辑 Mingw32 链接器以包含库(ming32、SDLmain 和 SDL)。但是链接器不会显示在设置中。

所以我的问题:

是否没有链接器设置,因为构建库只是一个编译操作?

一般来说,是否可以在现有库之上构建一个库?也就是说,使用 SDL 函数和结构编写我的库。或者我是否必须获取源代码并完全重建包含我的代码?

此外,在这种情况下,关于共享还是静态的建议?

(另外,关于去哪里学习更多关于编译器和链接器等的任何建议。我在学校学习了数据结构,但没有更进一步)

最佳答案

作为介绍,你必须很好地区分静态库和动态库,它们是完全不同的野兽......对你的问题说:

Is there no linker settings because building a library is only a compiling operation?

我猜你在这种情况下创建了一个静态库。静态库只是构成源代码树的所有单个目标文件(即编译器生成的 .o 文件)在一个目标文件中的集合。不多也不少。

对于静态库,您不需要指定哪些是依赖项,因为据了解,在编译最终可执行文件时,您的库将与它所依赖的所有其他库链接。因此,只有在那个时候(最终可执行文件构建)才会检测到任何丢失的符号,并且所有其他库都必须可用。

共享库(也称为动态库)是一个可执行文件,其中嵌入了它所依赖的所有静态库。它还可以与其他共享库有外部依赖关系,这些共享库不会被嵌入。

And in general, is it possible to build a library on top of the existing libraries? That is, write my library using SDL functions and stucts. Or would I have to get the source code and rebuild entirely with my code included?

对于静态库和动态库来说,这是完全可能的。

Also, advice on shared vs. static in this instance?

在这种情况下,无法提供建议,因为您没有指定足够的信息。 看看这个:When to use dynamic vs. static libraries , 和 this , 有一种指导方针。

(另外,关于去哪里学习更多关于编译器和链接器等的任何建议。我在学校学习了数据结构,但没有更进一步)

我认为上面的两个链接为您提供了大量信息。如果您想进一步了解细节,可以从this wikipedia article开始。并从那里浏览。

关于c++ - 在另一个库(SDL 和 Eclipse)之上构建一个新库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6154628/

相关文章:

c++ - read was not declared 错误信息

Clang C 到 LLVM 编译修剪 "mistaken code"

c++ - Eclipse CDT 索引器不能完全识别 c++11

c++ - 调试-进入操作系统功能?

c++ - CURL download_progress 抛出 SIGSEGV

c++ - 由 ref 传递给函数的 vector 自动取消分配

c++ - 共享指针初始化列表构造函数及其类型构造函数的更改

c++ - 如何在 C++ 中打印方法指针的地址?

c++ - 如何隐式链接库?

c++ - Eclipse CDT 构建配置 - 使用 CPP 单元测试 DLL