当前位置:  开发笔记 > 编程语言 > 正文

创建一个项目,从Makefile到UNIX中的静态/动态库

如何解决《创建一个项目,从Makefile到UNIX中的静态/动态库》经验,为你挑选了2个好方法。

伙计们,你会在unix上描述一些关于c ++构建块的事情吗?

我想创建一个链接静态库和动态库(.so)的应用程序.

问题1: 如何使用gcc/g ++创建静态库?如何使用我的应用程序链接.

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

简介:我一直在使用makefile和库多年,由其他人编写.因此,每当我修改它时,我只是简单地剪切粘贴的东西,而不是真正理解它.现在我想深入了解构建/链接/创建Makfile过程.

在私密细节中描述这些概念的好书是什么?

谢谢



1> greyfade..:

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

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

man页面描述了这些选项.

动态库通常通过-shared切换到gccld和输出文件名来构建,并带有.so扩展名.

Autotools通过该libtool程序处理此问题.我不熟悉它的用法.

链接这些库可以通过列出带有-l(ell)开关的库(例如-lX链接到libX.so)或通过使用绝对路径直接指定它们(例如添加/usr/lib/libX.so到命令)来完成.通过指定存档-static之前-l.a存档的适当绝对路径来链接静态库.



2> Paul Becking..:

Bare bones Makefile用于创建一个静态库,包含foo.cpp,bar.cpp中的代码:

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)

Bare.cones的裸机Makefile为静态链接到library.a的应用程序baz.cpp:

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)

动态图书馆离开了,咳咳,作为读者的练习.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有