如何使用C中的公共代码实现可执行文件和共享库

时间:2015-02-11 21:53:59

标签: c linux dependencies shared-libraries eclipse-cdt

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

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

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

Shared Library Project
    +-----folderB
        ------------- libcode.c
        ------------- libcode.h

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

我如何组织项目以便没有重复的文件?

解决方案A(当前)

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

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

Shared 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绝对是一种更好的做法吗?

1 个答案:

答案 0 :(得分:0)

您可能应该将源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