废话不讲。
CONTENTS
测试代码:
main_entry.c
#include <stdio.h> #include "mylib.h" int main(void) { test_funcA(); return 0; }
mylib.h
#ifndef MY_LIB_H #define MY_LIB_H void test_funcA(void); #endif // MY_LIB_H
mylib.c
#include <stdio.h> #include "mylib.h" void test_funcA(void) { printf("Init test_funcA called\r\n"); int *pX = 0; *pX = 100; printf("test_funcA called\r\n"); }
整体编译:
cstriker1407@cstriker1407:~/workspace/libtest$ gcc -g main_entry.c mylib.c -o direct.bin cstriker1407@cstriker1407:~/workspace/libtest$ cstriker1407@cstriker1407:~/workspace/libtest$ cstriker1407@cstriker1407:~/workspace/libtest$ ./direct.bin Init test_funcA called 段错误 (核心已转储) cstriker1407@cstriker1407:~/workspace/libtest$ dmesg | tail ........ [21840.270979] direct.bin[14218]: segfault at 0 ip 0000559b33b3c6d0 sp 00007ffe9c674dc0 error 6 in direct.bin[559b33b3c000+1000] 6D0 = 0000559b33b3c6d0 - 559b33b3c000 cstriker1407@cstriker1407:~/workspace/libtest$ addr2line -e direct.bin 6D0 -f -p test_funcA 于 /home/cstriker1407/workspace/libtest/mylib.c:10
静态库:
cstriker1407@cstriker1407:~/workspace/libtest$ gcc -g -c mylib.c -o mylib.o cstriker1407@cstriker1407:~/workspace/libtest$ ar -rcs libmylib.a mylib.o cstriker1407@cstriker1407:~/workspace/libtest$ gcc -g main_entry.c -L. -lmylib -o static.bin cstriker1407@cstriker1407:~/workspace/libtest$ ./static.bin Init test_funcA called 段错误 (核心已转储) cstriker1407@cstriker1407:~/workspace/libtest$ dmesg | tail ........ [22252.413286] static.bin[14519]: segfault at 0 ip 0000563d3fee26d0 sp 00007ffc7a0a95d0 error 6 in static.bin[563d3fee2000+1000] 6D0 = 0000563d3fee26d0 - 563d3fee2000 cstriker1407@cstriker1407:~/workspace/libtest$ addr2line -e static.bin 6D0 -f -p test_funcA 于 /home/cstriker1407/workspace/libtest/mylib.c:10
动态库:
cstriker1407@cstriker1407:~/workspace/libtest$ gcc -g -DPIC -fPIC -c mylib.c -o mylib.o cstriker1407@cstriker1407:~/workspace/libtest$ gcc -g -shared -DPIC -fPIC -o libmylib.so mylib.o cstriker1407@cstriker1407:~/workspace/libtest$ gcc -g main_entry.c -L. -lmylib -o dynamic.bin cstriker1407@cstriker1407:~/workspace/libtest$ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:./ cstriker1407@cstriker1407:~/workspace/libtest$ldd dynamic.bin linux-vdso.so.1 => (0x00007ffcdd78a000) libmylib.so (0x00007f8ef5fe3000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8ef5bf7000) /lib64/ld-linux-x86-64.so.2 (0x000055f746964000) cstriker1407@cstriker1407:~/workspace/libtest$ ./dynamic.bin Init test_funcA called 段错误 (核心已转储) cstriker1407@cstriker1407:~/workspace/libtest$ dmesg | tail ......... [22598.662423] dynamic.bin[14722]: segfault at 0 ip 00007f91f48bb6a0 sp 00007ffc18dd83b0 error 6 in libmylib.so[7f91f48bb000+1000] cstriker1407@cstriker1407:~/workspace/libtest$ addr2line -e libmylib.so 6a0 -f -p test_funcA 于 /home/cstriker1407/workspace/libtest/mylib.c:10
发表评论