伙计们,你会在unix上描述一些关于c ++构建块的事情吗?
我想创建一个链接静态库和动态库(.so)的应用程序.
问题1: 如何使用gcc/g ++创建静态库?如何使用我的应用程序链接.
问题2: 如何在makefile中指定它,链接静态和动态库,假设两个库都有头文件
简介:我一直在使用makefile和库多年,由其他人编写.因此,每当我修改它时,我只是简单地剪切粘贴的东西,而不是真正理解它.现在我想深入了解构建/链接/创建Makfile过程.
在私密细节中描述这些概念的好书是什么?
谢谢
gre*_*ade 15
静态库通常使用该命令存档ar.一旦你构建了所有目标文件(最好使用-fPICGCC 上的开关),你可以ar像这样运行:
ar -rs archivename.a list.o of.o objects.o
Run Code Online (Sandbox Code Playgroud)
该man页面描述了这些选项.
动态库通常通过-shared切换到gcc或ld和输出文件名来构建,并带有.so扩展名.
Autotools通过该libtool程序处理此问题.我不熟悉它的用法.
链接这些库可以通过列出带有-l(ell)开关的库(例如-lX链接到libX.so)或通过使用绝对路径直接指定它们(例如添加/usr/lib/libX.so到命令)来完成.通过指定存档-static之前-l或.a存档的适当绝对路径来链接静态库.
Pau*_*ham 11
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)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
动态图书馆离开了,咳咳,作为读者的练习.
| 归档时间: |
|
| 查看次数: |
37964 次 |
| 最近记录: |