相关疑难解决方法(0)

为归档而构建的静态库,不是链接的体系结构(x86_64)

当我尝试编译两个不同的程序时,我遇到了似乎是同样的问题.他们每个人首先创建一个静态库,然后创建链接该库的主应用程序.我正在使用gcc 4.7.2在Mac OS Mavericks上工作.

计划1

这是我跑步时发生的事情make:

首先,库libfeat.a已创建,但我收到警告:

ar rc ../lib/libfeat.a imgfeatures.o utils.o sift.o kdtree.o minpq.o xform.o
ranlib  ../lib/libfeat.a
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: warning for library: ../lib/libfeat.a the table of contents is empty (no object file members in the library define global symbols)
Run Code Online (Sandbox Code Playgroud)

然后,在编译应用程序时,它表示它不能使用该库,因为它不是为相同的体系结构(x86_64)构建的:

gcc -O3 -I../include `pkg-config --cflags opencv` `pkg-config --cflags gtk+-3.0` `pkg-config --cflags gsl` siftfeat.c -o ../bin/siftfeat -L../lib -lfeat `pkg-config --libs opencv` `pkg-config --libs gtk+-3.0` `pkg-config --libs gsl`
ld: warning: ignoring file ../lib/libfeat.a, file was built for archive …
Run Code Online (Sandbox Code Playgroud)

c++ macos static-libraries unix-ar

14
推荐指数
3
解决办法
1万
查看次数

在 MacOSX 上静态链接时找不到符号

我正在尝试创建一个静态库并将其链接到 MacOS X(几个版本):文件foo.c

char foo[111];
Run Code Online (Sandbox Code Playgroud)

文件bar.c

#include <string.h>

extern char foo[];

int bar(char *src) {
  strcpy(foo, src);
  return strlen(foo);
}
Run Code Online (Sandbox Code Playgroud)

创建一个库:

$ cc -c foo.c bar.c
$ ar r libfoobar.a foo.o bar.o
ar: creating archive libfoobar.a
$ ranlib libfoobar.a 
$ nm libfoobar.a 

libfoobar.a(foo.o):
000000000000006f C _foo

libfoobar.a(bar.o):
                 U ___strcpy_chk
0000000000000000 T _bar
                 U _foo
                 U _strlen
Run Code Online (Sandbox Code Playgroud)

创建一个小测试程序:

文件main.c

#include <stdio.h>

int bar(char *);

int main(void) {
  printf("foobarbar = %i\n", bar("123"));
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译并链接: …

linker clang static-libraries

6
推荐指数
1
解决办法
1146
查看次数

标签 统计

static-libraries ×2

c++ ×1

clang ×1

linker ×1

macos ×1

unix-ar ×1