gpt4 book ai didi

c - 如何用C语言通用代码实现可执行文件和共享库

转载 作者:行者123 更新时间:2023-11-30 17:20:42 25 4
gpt4 key购买 nike

我正在设计一个 Linux C 项目,它由两个二进制文件组成:一个可执行文件和一个共享库。

我使用 Eclipse-cdt 有以下项目结构:

Main Project Executable    +-----folderA        ------------- sourceA.c        ------------- sourceA.h    +-----folderB        ------------- sourceB.c        ------------- sourceB.h    main.cShared Library Project    +-----folderB        ------------- libcode.c        ------------- libcode.h

libcode.c 中的共享库代码严格依赖于主项目中的 folderAfolderB 代码。

如何组织项目以避免重复的文件?

解决方案 A(当前)

到目前为止我发现的最好的解决方案是在 eclipse 中使用链接资源:

Main Project Executable    +-----folderA        ------------- sourceA.c        ------------- sourceA.h    +-----folderB        ------------- sourceB.c        ------------- sourceB.h        ------------- libcode.c        ------------- libcode.h    main.cShared Library Project    +-----folderA [linked]        ------------- sourceA.c [linked]        ------------- sourceA.h [linked]    +-----folderB [linked]        ------------- sourceB.c [linked]        ------------- sourceB.h [linked]        ------------- libcode.c [linked]        ------------- libcode.h [linked]

请注意,我将 100% 的共享库代码移至主项目中,并链接了共享库中我需要的所有文件。这样我就不需要在共享库项目中拥有任何“物理”源文件,但我仍然认为这不是一个好主意,因为它可能会让其他开发人员感到惊讶(违反 POLS 原则)。

解决方案B

可以选择将所有通用代码移动到第三个项目中,并使两个项目依赖于它,但就我而言,这将导致大量的代码重构,我想避免这种情况。

还有其他可能性吗?解决方案 B 绝对是更好的做法吗?

最佳答案

您可能应该将 folderAfolderB 中的源代码放入共享库中,因为它们显然包含核心功能。在可执行文件中放置使用该库执行某些操作的源代码,例如,调用 libcode 中的各种函数来实现最终用户的某些目标。您需要将可执行文件链接到共享库。

Main Project Executable [links to shared library] 
main.c [uses libcode to do stuff]

Shared Library Project
+-----folderA
------------- sourceA.c
------------- sourceA.h
+-----folderB
------------- sourceB.c
------------- sourceB.h
------------- libcode.c
------------- libcode.h

关于c - 如何用C语言通用代码实现可执行文件和共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28465269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com