gcc 基本知识

2021-03-26  本文已影响0人  lindyang

选项

-Ldir
Add directory dir to the list of directories to be searched for -l.

-llibrary
-l library // POSIX compliance, not recommended.
除非指定 -static, 否则优先共享库;
顺序很重要;
循环引用要多次指定(gcc foo.c -lfoo -lbar -lfoo)
-( -) -start-group和--end-group 指定循环依赖关系的归档

变量

/usr/local/include/
/usr/include/

L 选项之后,在默认目录之前被搜索。

/usr/local/lib/
/usr/lib/
-fno-builtin
-fno-builtin-function: -fno-builtin-printf
ld -static
gcc -shared -fPIC -o lib.so lib.c

gcc -m32

ld -static -m elf_i386

pip

pip install \
    --global-option=build_ext \
    --global-option="-I/tmp/openssl/include" \
    --global-option="-L/tmp/openssl/lib" \
    --global-option="-R/tmp/openssl/lib" \
    cryptography==1.0;

CFLAGS

CFLAGS=-I/usr/include -I/path/include

LDFLAGS和LIBS区别

LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib
LIBS = -lpthread -liconv

ld

ld

python 调用 so

import ctypes
from cytpes import create_string_buffer, c_int, c_char_p, c_void_p
so = ctypes.cdll.LoadLibrary
lib = so("./lib.so")
p = create_string_buffer(512)
code = lib.enums(p,sizeof(p), 0);

def callback_fn(buf, void_p):
    ...
    return 0
# end def

void_ppp = 123456
CMPFUNC = ctypes.CFUNCTYPE(c_int, c_char_p, c_void_p)
_callback_fn = CMPFUNC(callback_fn)
code = lib.monitor(_callback_fn, void_ppp)

clang --target=i386

上一篇 下一篇

猜你喜欢

热点阅读