微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在UNIX中创build一个项目,从Makefile到静态/dynamic库

伙计们,你会在unix上描述一些关于c ++构build块的东西。@H_404_1@

我想创build一个与静态库和dynamic库(.so链接的应用程序。@H_404_1@

问题1: 如何使用gcc / g ++创build静态库?如何使我的应用程序链接反对它。@H_404_1@

问题2: 如何在makefile中指定它,链接静态和dynamic库,假定两个库都有头文件@H_404_1@

杀和信号有多准确?@H_404_1@

如何解决DNS名称parsing在其他协议似乎closures时运行?@H_404_1@

Qt助手在Linux中使用enableRemoteControl选项失败@H_404_1@

强制释放()将malloc内存返回给操作系统@H_404_1@

以编程方式下载Windows符号@H_404_1@

简介:我一直在使用makefile和库多年,由别人写的。 因此,每当我修改它时,我都会简单地剪切粘贴,而没有真正理解它。 现在我想深入了解build立/链接/创buildMakfile过程的深入。@H_404_1@

什么是一个很好的书描述这些概念在亲密的细节?@H_404_1@

谢谢@H_404_1@

posix_fallocate是否使用以appened模式打开的文件?@H_404_1@

我应该使用什么工具来创build我的构build器?@H_404_1@

从C打开Windows文件/文件属性对话框@H_404_1@

Qt不会链接任何东西@H_404_1@

C ++multithreading执行速度减慢@H_404_1@

静态库通常用ar命令存档 。 一旦你建立了所有的目标文件(最好用-fPIC上的-fPIC开关),你可以像这样运行ar :@H_404_1@

ar -rs archivename.a list.o of.o objects.o@H_404_1@

man页介绍了这些选项。@H_404_1@

动态库通常使用-shared开关构建到gcc或ld并使用.so扩展名输出文件名。@H_404_1@

Autotools使用libtool程序处理这个问题。 我不熟悉它的使用。@H_404_1@

可以通过使用-l (ell)开关(例如-lX链接到libX.so )列出库或通过直接使用绝对路径指定它们来链接这些库(例如,添加/usr/lib/libX.so到你的命令)。 静态库通过在-l之前指定-static或.a归档的相应绝对路径链接。@H_404_1@

裸骨骼Makefile创建一个静态库,由foo.cpp,bar.cpp中的代码组成:@H_404_1@

PROJECT = library.a OBJECTS = foo.o bar.o CFLAGS = -Wall -pedantic all: $(PROJECT) .cpp.o: g++ -c $(CFLAGS) $< $(PROJECT): $(OBJECTS) libtool -o $(PROJECT) -static $(OBJECTS)@H_404_1@

光秃秃的骨头应用程序baz.cpp的Makefile静态链接到library.a:@H_404_1@

PROJECT = baz CFLAGS = -Wall -pedantic OBJECTS = baz.o all: $(PROJECT) .cpp.o: g++ -c $(CFLAGS) $< $(PROJECT): $(OBJECTS) library.a g++ $(OBJECTS) -L. -llibrary -o $(PROJECT)@H_404_1@

动态图书馆,嗯,作为一个练习读者。@H_404_1@

回答1:要从源文件foo.c和bar.c中创建静态库,请执行以下操作:@H_404_1@

gcc -c foo.c gcc -c bar.c ar rc mylibrary.a foo.o bar.o@H_404_1@

有关这方面的更多信息,请阅读GCC手册以了解如何使用编译器以及通过编译器的链接器。 binutils手册也应该是有帮助的。@H_404_1@

回答2: GNU Make手册很不错。 要真正了解图书馆及其工作原理,请阅读John R. Levine的“ Linkers and Loaders”一书。@H_404_1@

静态库非常简单,但共享库可能非常繁琐,具体取决于平台和所需的可移植性。 作为一个例子,在一些系统上,静态库和共享库必须用不同的选项编译才能正常工作(一个必须另一个不能与位置无关的代码编译)。 整个公用事业框架已经被开发出来,使得这更容易(libtool),但是它们本身并不是没有问题的。@H_404_1@

既然你指的是gcc,我假设你在使用GNU Make。 我找到的最好的文档是官方手册 ,它涵盖了所有你需要知道的易于理解的术语。@H_404_1@

当我学习Linux编程时, 高级Linux编程帮了我很大的忙。 您可以在此pdf中查看“书写和使用库”部分。 它在Linux中解释了很多关于库的问题。@H_404_1@

你也可以看看这个: http : //www.faqs.org/docs/Linux-HOWTO/Program-Library-HOWTO.html@H_404_1@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐