如何使用Codelite 11.0.0编译静态库? 我想从我为C++项目写的所有函数中编译一个静态库。我在Ubuntu 16.04上使用CodeLite 11.0.0,配置为使用GCC作为编译器
我按照中的说明进行了操作,根据中的说明,这应该是可能的,并将项目类型从可执行更改为静态库 运行项目(CTRL+F5命令)后,我希望在如何使用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
/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
的重复定义-它自己的定义加上 libmyprog.a(main.o)中的一个。重复的定义是错误的,因此链接失败main
main
函数的定义放入静态
库是没有意义的,因为如果在另一个成员的链接中需要该成员
程序,则其链接将失败
因此,将程序项目转换为静态库项目需要一些
转换前的重构:-
- 如果在同一源中定义了静态库中所需的任何函数
文件名为
,然后需要将其从源文件中取出并定义它 这是另一个main
- 然后,从项目中删除定义
的源文件main
- 最后,转换并重建项目
提供。构建、测试、调试、编辑。。。直到完成。我建议开始学习cmake。它将帮助您解决多个问题,如果编写正确,它还将简化用户的生活。@uncomputable,谢谢您不是第一个。但我不是一个软件开发人员,我真的很喜欢IDE和它们带来的简化。我确信有一种简单的方法可以配置CodeLite来为我实现这一点,但我就是找不到。谢谢,特别是额外的提示!我按照您的建议创建了一个单独的项目,其中包含我想在静态库中组装的所有源文件。你的回答是星期一早上的惊喜。
$(IntermediateDirectory)/lib$(ProjectName).a