制作库并避免链接器问题
Making libraries and avoiding linker issues
我有大约十几个函数都与同一目的有关,我正在尝试创建一个库。一个我可以存储在某个目录中的库,然后我可以将其作为包含目录,并在需要使用的项目中包含所述库。
旁注:
首先,我想说,我已经花了相当多的时间来寻找答案。当我意识到当我将库包含在多个源文件中时,链接器会抛出错误时,我以为我找到了解决方案。现在我知道了这一点,我再次为自己的不幸寻找答案。我开始研究其他我知道可以做同样事情的库,或者我相信可以做同样的事情的库。我一直在研究conio.h,因为它包含了kbhit()和getch()函数。虽然我不明白其中的大部分内容,但我搜索了几个关键词,发现它实际上可能包括通过dll的函数定义。
我还做了一些谷歌搜索。
来解释一下我在做什么。我创建了2或3个数据结构,使我能够创建带有标头的数据块,这些标头指定数据是什么以及如何处理数据。然后还有几个用于读取和将这些块写入文件。
为了便于创建这些结构,我制作了独立的函数。为了便于操作这些结构,我制作了更多独立的函数。
简单地说,我需要一种方法来包含一个以某种方式直接或间接定义所有这些函数和结构的库。我该怎么做 (不创建大量内联)
您可以使用#pragma comment
在代码中包含.lib
依赖项
#pragma comment (lib,"LibraryFileName.lib")
你可以在这里阅读更多关于#pragma comment
的信息。
我通常喜欢在我的库中创建一个Linker.h
文件,并将该文件包含在库中的每个标头中。这是一个例子。
#ifndef __GRAPHICCOMMUNICATOR_GUARD_linklib__
#define __GRAPHICCOMMUNICATOR_GUARD_linklib__
#if defined(_DEBUG)
#pragma comment (lib,"GraphicCommunicator-mt-d.lib")
#elif !defined(_DEBUG)
#pragma comment (lib,"GraphicCommunicator-mt.lib")
#else
#error link: no suitable library
#endif
#endif // __GRAPHICCOMMUNICATOR_GUARD_linklib__
将所有内容放在一个标头中会导致问题。
您可以将类成员函数以内联或其他内联函数的形式定义在头中,并多次包含它们。
否则,您需要将实现移动到cpp文件中,并构建一个静态(或动态)库。如果你正在学习,静态可能更容易。创建一个新项目并从应用程序设置中选择"静态库"。
要使用库,您可以使用Caeser的#pragma
答案,或者只需将.lib
添加到希望使用它的项目中的链接器设置中,以及#including
所需的标头。
- 使用jsoncpp库时出现链接问题
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 如何将GTest与CMake一起使用?遵循谷歌指南时的链接问题
- 未解决的外部链接问题
- 'make check' GLIBC 运行时的链接问题
- 在树莓派上用libtorch构建程序时的链接问题
- 野牛弹性链接问题
- 与 AWS 开发工具包的链接问题
- Qt & Firebase C++ SDK 在 iOS 上的链接问题
- 链接问题 boost::p ython::numpy.
- 与 32 位共享对象的链接问题
- 在单元测试项目中包括 .c 文件,并从多个 cpp 文件访问它而不会出现链接问题
- 安卓链接问题
- LLVM 传递链接问题:未定义的符号
- Cmake Mac OSX库链接问题:在Linux上进行编译,但在Mac上进行了编译
- 用libclang解析源文件 - 链接问题包括文件
- C / C++链接问题与非常简单的设置
- Zbar 在 vs2015 链接问题
- Vulkan + GLFW + Cmake在Linux环境下的链接问题
- TFS构建由于链接问题而失败