caculate.c
在文件夹中
correct_so
&
wrong_so
so
这个
app
libcac.so
它是用
将由使用
main.c
~/tt$ tree
.
âââ correct_so
â  âââ caculate.c
â  âââ caculate.h
â  âââ libcac.so
âââ main
âââ main.c
âââ wrong_so
âââ caculate.c
âââ caculate.h
âââ libcac.so
#include "caculate.h"
int add(int a, int b)
{
return (a + b);
}
#include "caculate.h"
int add(int a, int b)
{
return (a + b) * 2;
}
计算h:
(同
&
错了,所以
)
#ifndef _CACULATE_H__INCLUDE_
#define _CACULATE_H__INCLUDE_
int add(int a, int b);
#endif
#include <stdio.h>
#include <unistd.h>
#include "caculate.h"
int main()
{
int a = 1;
int b = 2;
while (1)
{
printf("%d + %d = %d\n", a, b, add(a, b));
sleep(1);
}
return 0;
}
我的问题是:
我做了以下步骤,细节参考下一个日志:
-
编译出2个不同的
在两个不同的文件夹中:
错了,所以
-
编译
main
libcac.so公司
-
使用错误的so路径
错了,所以
LD_LIBRARY_PATH
,你可以说
1 + 2 = 6
. 现在我可以用
ldd main
,显示
libcac.so => wrong_so/libcac.so
,
ldd
a predefined order
/lib, /usr/lib, LD_LIBRARY_PATH etc
-
如果以后
export LD_LIBRARY_PATH=correct_so
到正确的一个,
ldd公司
设置。所以呢
在这帮不了我。
总而言之,我如何知道应用程序是否以正确的方式运行,所以当它在运行时,如果没有打印日志?同时让我们假设
LD\库\路径
然后,我可以告诉其他人:哦,系统中有两个版本的库,你只是用一个问题版本运行应用程序,所以应用程序肯定有运行时问题。
~/tt$ cd correct_so/
~/tt/correct_so$ ls
caculate.c caculate.h libcac.so
~/tt/correct_so$ gcc -shared -fPIC caculate.c -o libcac.so
~/tt/correct_so$ cd ..
~/tt$ cd wrong_so/
~/tt/wrong_so$ gcc -shared -fPIC caculate.c -o libcac.so
~/tt/wrong_so$ cd ..
~/tt$ gcc main.c -o main -I correct_so -L correct_so -lcac
~/tt$ ldd main
linux-vdso.so.1 => (0x00007fffd3dfe000)
libcac.so => correct_so/libcac.so (0x00007f1a70b7c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1a7079f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1a70d80000)
~/tt$ export LD_LIBRARY_PATH=wrong_so && ./main
1 + 2 = 6
1 + 2 = 6
1 + 2 = 6
^Z
[1]+ Stopped ./main
~/tt$ ldd main
linux-vdso.so.1 => (0x00007fff1abd9000)
libcac.so => wrong_so/libcac.so (0x00007fdb5523c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdb54e5f000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdb55440000)
~/tt$ export LD_LIBRARY_PATH=correct_so
~/tt$ ldd main
linux-vdso.so.1 => (0x00007fffa11fe000)
libcac.so => correct_so/libcac.so (0x00007ffeda6b6000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f82f80bc000)
/lib64/ld-linux-x86-64.so.2 (0x00007f82f849b000)
~/tt$ fg
./main
1 + 2 = 6
^C