相关疑难解决方法(0)

.so,.la和.a库文件有什么区别?

我知道.so文件是一种动态库(许多线程可以共享这些库,因此不需要在内存中有多个副本).但是.a和之间有什么区别.la?这些都是静态库吗?

如果动态库比静态库有很大的优势,为什么还有很多静态库呢?

我还想知道加载库(两种类型)的基本机制,以及在某个地方使用它时如何调用lib中的一段代码.我应该学习哪一部分内核?我应该知道哪些相关的Linux命令/实用程序才能知道进程是如何运行的?(我现在才知道ld命令)

我什么时候应该尝试构建代码.so.a?哪一个更好?

[mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l
total 96
-rw-r--r-- 1 mirror mirror 22892 Sep  2 23:25 openvpn-plugin-auth-pam.a
-rwxr-xr-x 1 mirror mirror   931 Sep  2 23:25 openvpn-plugin-auth-pam.la
-rwxr-xr-x 1 mirror mirror 23621 Sep  2 23:25 openvpn-plugin-auth-pam.so
-rw-r--r-- 1 mirror mirror 17228 Sep  2 23:25 openvpn-plugin-down-root.a
-rwxr-xr-x 1 mirror mirror   932 Sep  2 23:25 openvpn-plugin-down-root.la
-rwxr-xr-x 1 mirror mirror 18805 Sep  2 23:25 openvpn-plugin-down-root.so
Run Code Online (Sandbox Code Playgroud)

linux memory-management shared-libraries ld static-libraries

216
推荐指数
1
解决办法
11万
查看次数

有C++反编译器吗?

我有一个程序,我丢失了C++源代码.那里有没有好的C++反编译器?

我已经跑过Boomerang了.

c++ decompiling reverse-engineering

106
推荐指数
4
解决办法
26万
查看次数

android中的.so文件的实际用途是什么?

我想在我的应用程序中实现像聊天这样的环聊.我一直在使用opentok库.在那里我见过libopentok.so文件.任何人都可以告诉我libopentok.so文件的确切用法是什么.

android chat opentok .so

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

libmysqlclient.a 找不到

在 Amazon EC2 上(uname -r给出“3.4.37-40.44.amzn1.x86_64”,我听说它基于 Cent OS)我尝试安装:

yum install mysql
yum install mysql-devel
Run Code Online (Sandbox Code Playgroud)

乃至

yum install mysql-libs
Run Code Online (Sandbox Code Playgroud)

(由于这个线程。)

我正在尝试编译一个程序并将 MySQL 库链接到它。这在我的 Mac 上运行良好(但 Mac libmysqlclient.a)。 libmysqlclient.a在这台机器上绝对找不到。它所拥有的只是libmysqlclient.so,而且还有很多版本。

$ sudo find / -name libmysqlclient*
Run Code Online (Sandbox Code Playgroud)

给予

/usr/lib64/mysql/libmysqlclient_r.so
/usr/lib64/mysql/libmysqlclient.so
/usr/lib64/mysql/libmysqlclient.so.18
/usr/lib64/mysql/libmysqlclient.so.18.0.0
/etc/alternatives/libmysqlclient
/etc/alternatives/libmysqlclient_r
Run Code Online (Sandbox Code Playgroud)

ls -l /usr/lib64/mysql
Run Code Online (Sandbox Code Playgroud)

给予

lrwxrwxrwx 1 root root      34 Apr 11 19:21 libmysqlclient_r.so -> /etc/alternatives/libmysqlclient_r
lrwxrwxrwx 1 root root      32 Apr 11 19:21 libmysqlclient.so -> /etc/alternatives/libmysqlclient
lrwxrwxrwx 1 root …
Run Code Online (Sandbox Code Playgroud)

mysql g++

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

.o/.a/.so文件究竟是什么?

我想知道在编译C++程序时,.o或.so文件中存储的确切内容. 这篇文章给出了编译过程的一个相当不错的概述,并在其.o文件的功能,而据我了解,从这个帖子,u和.so文件只是多个.o文件合并成一个单一的文件,以静态(.a)或动态(.so)方式链接.

但我想检查一下我是否正确理解了这样一个文件中存储的内容.编译以下代码后

void f();
void f2(int);

const int X = 25;

void g() {
  f();
  f2(X);
}

void h() {
  g();
}
Run Code Online (Sandbox Code Playgroud)

我希望在.o文件中找到以下项目:

  • 机器代码g(),包含一些占位符地址f()f2(int)调用的位置.
  • 机器代码h(),没有占位符
  • 机器代码X,这只是数字25
  • 某种表格,指定文件中的哪些地址符号g(),h()并且X可以找到
  • 指定哪些占位符被用来指代未定义的符号另一个表f()f2(int),其必须在链接期间得到解决.

然后一个程序nm会列出两个表中的所有符号名称.

我想编译器可以f2(X)通过调用f2(25)来优化调用,但它仍然需要将符号X保留在.o文件中,因为无法知道它是否将从不同的.o文件中使用.

那会是正确的吗?.a和.so文件是否相同?

谢谢你的帮助!

c c++ compilation object-files archive-file

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