如何使用Codelite 11.0.0编译静态库? 我想从我为C++项目写的所有函数中编译一个静态库。我在Ubuntu 16.04上使用CodeLite 11.0.0,配置为使用GCC作为编译器

如何使用Codelite 11.0.0编译静态库? 我想从我为C++项目写的所有函数中编译一个静态库。我在Ubuntu 16.04上使用CodeLite 11.0.0,配置为使用GCC作为编译器,c++,static-libraries,codelite,C++,Static Libraries,Codelite,我按照中的说明进行了操作,根据中的说明,这应该是可能的,并将项目类型从可执行更改为静态库 运行项目(CTRL+F5命令)后,我希望在/Debug文件夹中找到一个.a文件,与可执行文件一起或代替可执行文件。不过,我只能找到可执行文件和一些.o和.o.d文件。当项目被设置为可执行时,我发现了同样的情况 我试图关闭和重新打开CodeLite,但没有帮助。我找不到任何关于如何使用CodeLite构建静态库的官方/非官方示例 有人知道如何设置CodeLite来生成.a静态库文件吗?正如您可能已经发现的,C

我按照中的说明进行了操作,根据中的说明,这应该是可能的,并将项目类型从可执行更改为静态库

运行项目(CTRL+F5命令)后,我希望在
/Debug
文件夹中找到一个
.a
文件,与可执行文件一起或代替可执行文件。不过,我只能找到可执行文件和一些
.o
.o.d
文件。当项目被设置为可执行时,我发现了同样的情况

我试图关闭和重新打开CodeLite,但没有帮助。我找不到任何关于如何使用CodeLite构建静态库的官方/非官方示例


有人知道如何设置CodeLite来生成
.a
静态库文件吗?

正如您可能已经发现的,CodeLite允许您更改 从设置->常规->项目类型中的下拉菜单中进行项目

但是,这样做不会更改项目目标的名称。那么,如果 您以可执行文件
myprog
开始您的项目,例如 调试生成在项目文件夹下生成的
/Debug/myprog
,然后 您可以将项目类型更改为静态库并重新生成它,调试 build仍将生成
/Debug/myprog
,但实际上该文件现在将 是一个静态库,缺少惯用的
lib
-前缀和
.a
扩展名

为输出文件指定常规静态库名称-
libmyprog.a
-您需要返回设置->常规和 将输出文件更改为:

$(IntermediateDirectory)/$(ProjectName)
致:

然后重建项目,它将输出一个静态的目标 图书馆,看起来像一个

当然,您必须在这两种情况下对项目设置进行相同的更改 调试释放配置,如果您希望它们都产生 具有相同文件类型和文件名的目标

但是…

如果这种将程序项目转换为静态库项目的方式不起作用 看起来非常光滑,这可能是因为它是一个很少使用的转换

转换后生成的静态库将包含完全相同的对象 生成程序的文件,包括定义 原始程序的
main
功能。让我们假设对象文件 是
main.o
,它定义了链接器可以看到的0个或多个其他函数

与静态库链接的任何其他程序,
newprog
,必须提供 它自己的
main
函数位于不同的对象文件中,因此在任何此类链接中 必须发生两件事:-

  • newprog
    的链接不需要在
    libmyprog.a(main.o)
    中定义的任何函数, 因此,
    libmyprog.a(main.o)
    没有链接,也可能不存在

  • newprog
    的链接确实需要一些函数,
    foo
    ,在
    libmyprog.a(main.o)
    中定义, 所以
    libmyprog.a(main.o)
    是链接的;然后,除了
    foo
    的定义外 程序链接
    main
    的重复定义-它自己的定义加上 libmyprog.a(main.o)中的一个。重复的定义是错误的,因此链接失败

将某个程序的
main
函数的定义放入静态 库是没有意义的,因为如果在另一个成员的链接中需要该成员 程序,则其链接将失败

因此,将程序项目转换为静态库项目需要一些 转换前的重构:-

  • 如果在同一源中定义了静态库中所需的任何函数 文件名为
    main
    ,然后需要将其从源文件中取出并定义它 这是另一个

  • 然后,从项目中删除定义
    main
    的源文件

  • 最后,转换并重建项目

您必须进行重构才能从原始程序源代码中提取 适合构建到静态库中的一组源文件

假设您已经这样做了,使用 CodeLite将为此目的在新项目向导中创建一个项目 选择->静态库作为项目类型,而不是某种类型 可执行文件的类型

然后只需将新的或现有的源文件添加到静态库项目中 直到它包含您希望库执行的所有函数的定义
提供。构建、测试、调试、编辑。。。直到完成。

我建议开始学习cmake。它将帮助您解决多个问题,如果编写正确,它还将简化用户的生活。@uncomputable,谢谢您不是第一个。但我不是一个软件开发人员,我真的很喜欢IDE和它们带来的简化。我确信有一种简单的方法可以配置CodeLite来为我实现这一点,但我就是找不到。谢谢,特别是额外的提示!我按照您的建议创建了一个单独的项目,其中包含我想在静态库中组装的所有源文件。你的回答是星期一早上的惊喜。
$(IntermediateDirectory)/lib$(ProjectName).a