构建共享库改为创建静态库
Building a shared library created a static library instead
我正在尝试将 libass 构建到 MinGW-w64 下具有静态链接的共享库中。当我配置
./configure --disable-static --enable-shared
它按预期生成共享库(动态链接)。但是,当我尝试通过设置
强制静态链接时
LDFLAGS=-static
它不是生成静态链接的共享库(没有依赖性的.dll),而是生成静态库(.a)。
我几乎可以肯定我拥有所有依赖的静态库,并且在 make 过程中没有显示任何错误或警告消息。
任何人都可以阐明我做错了什么吗?
静态库只是一个ar包。
可以使用ar命令进行打包和解包。
libtool
说不。
包的库存 autotools ltmain.sh
脚本解析 linkage 标志和
如果它找到 -static
它不会构建一个共享库,只是一个静态的
一.
这是它可以合理地做的最多的事情,因为您不能静态 link 共享
图书馆。共享库必须完全由位置独立 (PIC) 组成
代码或 linkage 将失败,而静态 linkage 将调用 linkage
非 PIC 目标文件,由非 PIC 标准和运行时库提供,
如果没有别的。
foo.c
#include <stdio.h>
void foo(void)
{
puts("foo");
}
构建动态 linked 共享库:
$ gcc -c -fPIC foo.c
$ gcc -shared -o libfoo.so foo.o
$ file libfoo.so
libfoo.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), \
dynamically linked, BuildID[sha1]=1adff7204d84d138a80bc4b6f3f38211e4b42812, \
not stripped
尝试构建静态 linked 共享库:
$ gcc -c -fPIC foo.c
$ gcc -shared -static -o libfoo.so foo.o
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/6/crtbeginT.o: \
relocation R_X86_64_32 against hidden symbol `__TMC_END__' cannot be used \
when making a shared object
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
我正在尝试将 libass 构建到 MinGW-w64 下具有静态链接的共享库中。当我配置
./configure --disable-static --enable-shared
它按预期生成共享库(动态链接)。但是,当我尝试通过设置
强制静态链接时LDFLAGS=-static
它不是生成静态链接的共享库(没有依赖性的.dll),而是生成静态库(.a)。
我几乎可以肯定我拥有所有依赖的静态库,并且在 make 过程中没有显示任何错误或警告消息。
任何人都可以阐明我做错了什么吗?
静态库只是一个ar包。 可以使用ar命令进行打包和解包。
libtool
说不。
包的库存 autotools ltmain.sh
脚本解析 linkage 标志和
如果它找到 -static
它不会构建一个共享库,只是一个静态的
一.
这是它可以合理地做的最多的事情,因为您不能静态 link 共享 图书馆。共享库必须完全由位置独立 (PIC) 组成 代码或 linkage 将失败,而静态 linkage 将调用 linkage 非 PIC 目标文件,由非 PIC 标准和运行时库提供, 如果没有别的。
foo.c
#include <stdio.h>
void foo(void)
{
puts("foo");
}
构建动态 linked 共享库:
$ gcc -c -fPIC foo.c
$ gcc -shared -o libfoo.so foo.o
$ file libfoo.so
libfoo.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), \
dynamically linked, BuildID[sha1]=1adff7204d84d138a80bc4b6f3f38211e4b42812, \
not stripped
尝试构建静态 linked 共享库:
$ gcc -c -fPIC foo.c
$ gcc -shared -static -o libfoo.so foo.o
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/6/crtbeginT.o: \
relocation R_X86_64_32 against hidden symbol `__TMC_END__' cannot be used \
when making a shared object
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status