首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >聚合静态库

聚合静态库
EN

Stack Overflow用户
提问于 2012-03-03 22:56:45
回答 2查看 1.5K关注 0票数 3

我尝试将多个.a文件聚合到一个文件中。命令如下:

代码语言:javascript
运行
复制
TARGET=libnumpy.a
DIR=build/lib.linux-x86_64-2.6/numpy
FILES=$(DIR)/core/_sort.a $(DIR)/core/multiarray.a $(DIR)/core/umath.a $(DIR)/core/scalarmath.a $(DIR)/core/umath_tests.a $(DIR)/core/multiarray_tests.a $(DIR)/lib/_compiled_base.a $(DIR)/numarray/_capi.a $(DIR)/fft/fftpack_lite.a $(DIR)/linalg/lapack_lite.a $(DIR)/random/mtrand.a

all:
    ar cr $(TARGET) $(FILES)

但是得到的库libnumpy.a是不可用的。当尝试用它编译一些东西时,我得到

代码语言:javascript
运行
复制
libnumpy.a: could not read symbols: Archive has no index; run ranlib to add one

(我尝试运行ranlib,但没有解决问题)

在执行nmlibnumpy.a时,我得到

代码语言:javascript
运行
复制
nm: _sort.a: File format not recognized
nm: multiarray.a: File format not recognized
nm: umath.a: File format not recognized 
nm: scalarmath.a: File format not recognized
nm: umath_tests.a: File format not recognized
nm: multiarray_tests.a: File format not recognized
nm: _compiled_base.a: File format not recognized
nm: _capi.a: File format not recognized
nm: fftpack_lite.a: File format not recognized
nm: lapack_lite.a: File format not recognized
nm: mtrand.a: File format not recognized

这有什么问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-03 23:48:01

正如@Mat提到的:

代码语言:javascript
运行
复制
#ar x <archivefile>  / * Repeat for all archives */
#ar cv <all Obj fiels>
票数 3
EN

Stack Overflow用户

发布于 2012-03-03 23:22:01

您正在将存档文件添加到存档文件。你不应该这样做,你应该把目标文件放在一个存档中。

如果您有GNU ar,一种方法是创建精简归档(使用T开关):

GNU ar可以选择创建一个精简归档,其中包含一个符号索引和对归档成员文件的原始副本的引用。这样的归档对于构建在本地构建中使用的库很有用,在本地构建中,可重定位的对象有望保持可用,而复制每个对象的内容只会浪费时间和空间。精简归档文件也是扁平化的,因此向精简归档文件添加一个或多个归档文件将分别添加嵌套归档文件的元素。归档文件元素的路径相对于归档文件本身进行存储。

否则,存档组成原始.a文件的所有单个.o文件。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9547061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档