-shared 스위치를 사용하는 clang에서 -fPIC 스위치를 사용하여 컴파일 한 개체 코드가 있습니다. 나는이 모든 것을 하나의 .so 공유 객체에 링크했다. 이제이 파일을 하나의 실행 파일로 링크하고 싶습니다. 설명서 페이지에서 ld
명령과 -l 스위치를 사용하여이 작업을 수행 할 수 있어야한다고 들었습니다. 나는이 작업을 수행 할 때, 나는 다음과 같은 오류가 발생합니다 :.so 파일을 실행 파일에 연결
ld -r -L./ -l:libmymath.so simpleone
ld: attempted static link of dynamic object `libmymath.so'
make: *** [simpleone] Error 1
은 내가 -dy 스위치와 같은 일을 시도했다, 그러나 그것은 나에게 같은 오류를 제공합니다. 이것이 작동하지 않는 이유를 정말로 이해하지 못합니다.
다음은이 모든 작업을 수행하기 위해 사용하는 메이크 파일입니다.
CC= clang
LD= ld -r
CFLAGS= -std=gnu99 -g -Oz -c
CSECFL= -fPIC -I -L
CFLAG3= -shared
RM= /bin/rm -f
OBJ= math.o my*.o
SO= libmymath.so
all: math my_add my_mul
math: math.c
$(CC) $(CFLAGS) [email protected] $(CSECFL)
my_add: my_add.c
$(CC) $(CFLAGS) [email protected] $(CSECFL)
my_mul: my_mul.c
$(CC) $(CFLAGS) [email protected] $(CSECFL)
simplemath: $(OBJ)
$(CC) $(OBJ) -o [email protected]
simplemath.o: $(OBJ)
$(LD) $(OBJ) -o [email protected]
lib1: my_add.o
$(CC) $(CFLAG3) my_add.o -o $(SO)
lib2: $(OBJ)
$(CC) $(CFLAG3) my_mul.o -o $(SO)
lib3: $(OBJ)
$(CC) $(CFLAG3) math.o -o $(SO)
simpleone: $(OBJ)
$(LD) -L./ -l:libmymath.so [email protected]
clean:
$(RM) *.o simplemath* *.t $(SO)
연결에 $ (CC)를 사용해야합니다. –
사용 $ (CC)는 나에게주는
'연타 -l : libmymath.so -o simpleone libmymath.so : 그 소리 : 오류 : 링커 명령'int_mul 'int_add'로 정의되지 않은 참조 libmymath.so'에 대한 정의되지 않은 참조 종료 코드 1로 실패했습니다. (호출을 보려면 -v를 사용하십시오.) make [*** [simpleone] Error 1' . –
Makefile이 완전히 엉망입니다. 어떤 파일에서 .so가 생성 되었습니까 - my_add.o, my_mul.o 또는 math.o? 이론적으로 - 그들 모두로부터, 그러나 당신이 쓴 것이 아닙니다. – keltar