标签: static-libraries

将 libc 静态链接到我的二进制文件会导致出现段错误

我需要构建一个静态链接 libc 的二进制文件。我在与源代码相同的目录中提供了 libc.a 。为了编译,我尝试了以下操作:

gcc -o foo foo.c libc.a 
Run Code Online (Sandbox Code Playgroud)

这导致了以下问题:

/usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `libc.a(strcmp.o)' can not be used when making an executable
Run Code Online (Sandbox Code Playgroud)

在研究这个问题时,我发现了以下问题:Linking Partial static and Partially Dynamic in GCC

按照顶部答案中的解决方案,我创建了自己的字符串比较函数my_strcmp.c并尝试了以下编译:

gcc -o foo foo.c mystrcmp.c libc.a 
Run Code Online (Sandbox Code Playgroud)

它确实有效,但是二进制文件现在很早就出现了段错误。如果没有静态链接 libc,这种情况就不会发生。这是 GDB 跟踪:

(gdb) backtrace                                
#0  0x00000000004fe48e in generic_start_main ()
#1  0x00000000004fe891 in __libc_start_main () 
#2  0x0000000000406b56 in _start ()  
Run Code Online (Sandbox Code Playgroud)

不太确定如何解释这一点。有人有主意吗?

c gcc libc static-libraries

2
推荐指数
1
解决办法
644
查看次数

了解 GOT(全局偏移表)和 PLT?

在写这个问题之前,我想强调一下,我自己做了几周的研究,阅读了数十篇文章,但这个问题仍然没有解决,而且我得到的解释根本没有意义(也许是因为我是链接世界的新手) )。所以我希望有人能提供简单但非常详细的答案。

我知道 GOT(全局偏移表)可以帮助我们解析动态链接中从另一个引用的全局符号。另外我读到:“每个共享库都有自己的 GOT”

  1. 但这是有问题的,如果两个程序使用同一个共享库怎么办?两者对于全局变量都有相同的值,但事实不应该如此。

  2. 至于我的主要问题:如果我不想使用惰性绑定,那么为什么我们需要 PLT,为什么不直接使用普通的 GOT 来处理变量呢?

assembly linker dynamic-linking static-libraries got

2
推荐指数
1
解决办法
910
查看次数

静态和动态地链接同一个库

我有一个静态链接到库(libA.2.0.a)的程序,并动态链接到另一个库(libB.so).libB.so还动态链接到旧版本的libA(libA.1.0.so).

这种配置是否可行?如果是这样,系统怎样知道从使用符号libA.2.0.a我的程序,并从符号libA.1.0.solibB.so

c dynamic-linking static-libraries static-linking

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

调用单例库

我有一个单例类,我将它编译为库静态(lib)或动态(dll).

是否可以保证在两种情况下对机器中同一文件的调用始终引用相同且唯一的实例?

编辑:如果进程加载两个不同的库,并且这些库中的不同函数想要使用单例类的实例,该怎么办?现在,他们正在访问同一个实例,对吗?

谢谢,

c++ dll singleton shared-libraries static-libraries

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

具有多个.h和.cu文件的静态库无法解析函数

使用multiple.h和.cu文件编译静态库时,我得到一个未解析的extern函数.这是一个复制错误的简短示例.

看来我不能让Nsight Eclipse Edition先编译extrafunctions.cu.在我的整个项目有额外功能的文件编译第一,但它仍然抛出无法解决外部函数错误.

以下是此示例的输出:

**** Build of configuration Debug for project linkerror ****

make all 
Building file: ../cudatest.cu
Invoking: NVCC Compiler
nvcc -I/usr/local/cuda/include -G -g -O0 -gencode arch=compute_30,code=sm_30 -odir "" -M -o "cudatest.d" "../cudatest.cu"
nvcc --compile -G -I/usr/local/cuda/include -O0 -g -gencode arch=compute_30,code=compute_30 -gencode arch=compute_30,code=sm_30  -x cu -o  "cudatest.o" "../cudatest.cu"
../cudatest.cu(19): warning: variable "devInts" is used before its value is set

../cudatest.cu(19): warning: variable "devInts" is used before its value is set

ptxas fatal   : Unresolved extern function …
Run Code Online (Sandbox Code Playgroud)

c++ cuda header-files static-libraries unresolved-external

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

在Mac OS 10.8(64位)上编译SQLCipher

当我在MacOS 64bit上编译SQLCIPHER时

./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=2" LDFLAGS="/Users/administrator/Documents/openssl/lib/libcrypto.a"
Run Code Online (Sandbox Code Playgroud)

我得到32位lib libsqlite3.a但我需要64位libsqlite3.a

我怎么能这样做?

macos static-libraries 32bit-64bit sqlcipher

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

静态库导入

我创建了一个静态库,但我无法导入它.以下是我将其添加到项目中的步骤.

1)从finder中,我将我的库.xcodeproj拖到我的主项目中.

2)我选择了主项目,去了目标,然后建立阶段.

3)我在Link Binary With Libraries and Target Dependencies下添加了库.

4)在Build Settings - Header Search Paths下,我补充道$(BUILT_PRODUCTS_DIR).

5)我也加入-ObjCOther Linker Flags.

但是,当我尝试导入库时,它不被识别.有人能帮忙吗?

xcode static-libraries import-libraries ios

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

无法调试c ++项目因为无法启动静态库启动程序*.lib

我正在使用一个我没有问题的库(Astro.lib)(我想这是一个发布版本).

我还内置了一个项目,引用库(它会作为一个发布EXE罚款),但因为我得到的消息"无法启动程序'Astro.lib’我不能调试项目.

如果我尝试调试lib然后我得到相同的错误,所以我猜它与没有构建调试我的lib但不知道如何修改有关.

我尝试使用MSDN信息更改属性页但不确定我是否正在解决正确的问题.我应该对链接项目库的属性页进行哪些更改?

提前致谢

c++ debugging static-libraries visual-c++

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

可执行文件,静态库和共享库之间的关系

我正在为项目编写构建系统,我不确定可执行文件,静态库和共享库之间的链接.

对我来说有三个肯定:

  • 可执行文件可以使用静态库和共享库.
  • 静态库可以使用静态库和共享库.
  • 共享库只能使用静态库.

关于第三次肯定,我仍然怀疑......

你能告诉我这件事吗?

c c++ shared-libraries static-libraries

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

了解由C ++生成的特定二进制文件是至关重要的吗?

我想知道使用哪个编译器来编译C ++中的特定库是否很重要?因为我听说过ABI兼容性,所以很好奇它是否重要!

例如,我可以下载用MSVC编译的Windows的OpenCV二进制文件(包括dll和lib),并在用MinGW编译的另一个代码中使用它们吗?

c++ binary dll abi static-libraries

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