我正在尝试使用safec lib函数,但是面临链接问题

时间:2020-06-22 10:38:47

标签: c lib

#include <stdio.h>
#include <string.h>

int main(){

        char * ch = "THISISsometest";
        char out[10] ;

        strcpy_s(out,ch);

        printf(" out : %s  its len is %d \n ", out , strlen(out));
        return 0;
}

尝试从git安装lib源代码 https://github.com/rurban/safeclib.git

root@DESKTOP-RUVNU9H:~/sample_C_safe# ls -l
total 3
-rw-r--r-- 1 root root  194 Jun 22 16:00 sscanf.c
-rw-r--r-- 1 root root 2008 Jun 22 16:01 sscanf.o
root@DESKTOP-RUVNU9H:~/sample_C_safe# gcc -o out.exe sscanf.o -lsafec-3.5.1
/usr/bin/ld: sscanf.o: in function `main':
sscanf.c:(.text+0x3a): undefined reference to `strcpy_s'
collect2: error: ld returned 1 exit status
root@DESKTOP-RUVNU9H:~/sample_C_safe#
root@DESKTOP-RUVNU9H:~/sample_C_safe# echo $LD_LIBRARY_PATH
:/usr/lib:/usr/local/lib
root@DESKTOP-RUVNU9H:~/sample_C_safe# ls -l /usr/local/lib/
total 932
-rw-r--r-- 1 root root  625344 Jun 22 13:14 libsafec-3.5.1.a
-rwxr-xr-x 1 root root     981 Jun 22 13:14 libsafec-3.5.1.la
lrwxrwxrwx 1 root root      23 Jun 22 13:14 libsafec-3.5.1.so -> libsafec-3.5.1.so.3.0.6
lrwxrwxrwx 1 root root      23 Jun 22 13:14 libsafec-3.5.1.so.3 -> libsafec-3.5.1.so.3.0.6
-rwxr-xr-x 1 root root  322080 Jun 22 13:14 libsafec-3.5.1.so.3.0.6
drwxr-xr-x 1 root root    4096 Jun 22 13:14 pkgconfig
drwxrwxr-x 1 root staff   4096 Jun 22 12:56 python2.7
drwxrwsr-x 1 root staff   4096 Apr 23 12:10 python3.8
root@DESKTOP-RUVNU9H:~/sample_C_safe#
root@DESKTOP-RUVNU9H:~/sample_C_safe#
root@DESKTOP-RUVNU9H:~/sample_C_safe#
root@DESKTOP-RUVNU9H:~/sample_C_safe# ldconfig -p | grep -i safec
        libsafec-3.5.1.so.3 (libc6,x86-64) => /usr/local/lib/libsafec-3.5.1.so.3
        libsafec-3.5.1.so (libc6,x86-64) => /usr/local/lib/libsafec-3.5.1.so
root@DESKTOP-RUVNU9H:~/sample_C_safe#

所以...这表明ld能够加载我们共享的obj文件

root@DESKTOP-RUVNU9H:~/sample_C_safe# nm -D /usr/local/lib/libsafec-3.5.1.so  | grep -i printf_s
0000000000010870 T _snwprintf_s_chk
00000000000083d0 T _sprintf_s_chk
000000000000f2c0 T _swprintf_s_chk
0000000000009b90 T _vsnprintf_s_chk
0000000000010cd0 T _vsnwprintf_s_chk
0000000000009930 T _vsprintf_s_chk
000000000000ef70 T _vswprintf_s_chk
000000000000ab00 T fprintf_s
000000000000fba0 T fwprintf_s
000000000000a900 T printf_s
000000000000ae50 T vfprintf_s
000000000000f6d0 T vfwprintf_s
000000000000afe0 T vprintf_s
000000000000f860 T vwprintf_s
000000000000f9b0 T wprintf_s
root@DESKTOP-RUVNU9H:~/sample_C_safe#

和libsafec-3.5.1.so包含printf_s。 但是我仍然遇到错误

/ usr / bin / ld:/tmp/ccUBo9E9.o:在函数main': check2.c:(.text+0x2b): undefined reference to printf_s'中 collect2:错误:ld返回1退出状态

1 个答案:

答案 0 :(得分:0)

#include <stdio.h>
#include <string.h>
#include <safe_str_lib.h>


int main(){

        char * ch = "THISISTEST2";
        char out[10] ;

        strcpy_s(out,10,ch);

        printf(" out : %s  its len is %d \n ", out , strlen(out));


        return 0;
}


root@DESKTOP-RUVNU9H:~/sample_C_safe#
root@DESKTOP-RUVNU9H:~/sample_C_safe# gcc sscanf.c -I /usr/lib/safeclib/include/ -lsafec-3.5.1
root@DESKTOP-RUVNU9H:~/sample_C_safe#
root@DESKTOP-RUVNU9H:~/sample_C_safe#
root@DESKTOP-RUVNU9H:~/sample_C_safe#
root@DESKTOP-RUVNU9H:~/sample_C_safe# ./a.out
 out :   its len is 0
 root@DESKTOP-RUVNU9H:~/sample_C_safe#

Now the input to < 10 bits size 

root@DESKTOP-RUVNU9H:~/sample_C_safe# vim sscanf.c

#include <stdio.h>
#include <string.h>
#include <safe_str_lib.h>


int main(){

        char * ch = "THISISTE";
        char out[10] ;

        strcpy_s(out,10,ch);

        printf(" out : %s  its len is %d \n ", out , strlen(out));


        return 0;
}

root@DESKTOP-RUVNU9H:~/sample_C_safe# gcc sscanf.c -I /usr/lib/safeclib/include/ -lsafec-3.5.1
root@DESKTOP-RUVNU9H:~/sample_C_safe#
root@DESKTOP-RUVNU9H:~/sample_C_safe#
root@DESKTOP-RUVNU9H:~/sample_C_safe# ./a.out
 out : THISISTE  its len is 8
 root@DESKTOP-RUVNU9H:~/sample_C_safe#