컴파일 오류가 났습니다.. 도와주세요
안녕하세요.
옛 버전 커널로 동작하는 프로그램을 최신 페도라25 버전에서 돌려보려고합니다.
우선 페도라 25는 설치했구요.
필요한 라이브러리가
libfnetlink
libnetfilter_queue
openssl
이라서 세개를 각각 최신 버전으로 설치하고 있었습니다.
(configure -prefix=/usr로 맞추고 하였습니다)
그런데 openssl은 이미 페도라25에 깔려있더라구요. 그래서 openssl은 config 까지만 하고 make 하지 않았습니다. (하다가 확인했습니다)
(버전은 1.0.2j-fips 입니다)
문제는 제가 돌려보려고 하는 프로그램을 새롭게 make 했을 때 다음과 같은 오류가 발생했습니다.
gcc: error: /usr/lib/libcrypto.a : No such file or directory
gcc: error: /usr/lib/libnetfilter_queue.a : No such file or directory
gcc: error: /usr/lib/libnetfilter_queue_libipq.a : No such file or directory
gcc: error: /usr/lib/libnfnetlink.a: No such file or directory
제가 각각을 확인하였을 때, 다음과 같았습니다.
1. libcrypto.a는 아예 파일이 없었습니다. openssl이 있으면 당연히 있을거라고 생각했는데, 왜인지 모르겠습니다.
2. libnetfilter_queue.a는 없고, 대신 확장자가 la인 파일이 있었습니다. Makefile 내부에서 la로만 수정하면 되는건지 모르겠습니다.
3. libnetfilter_queue_libipq.a 파일이 없습니다. 제가 netfilter에서 찾아보니, 다음과 같이 알려주더라구요.
->libnetfilter_queue is a userspace library providing an API to packets that have been queued by the kernel packet filter. It is is part of a system that deprecates the old ip_queue / libipq mechanism.
그렇다면, libipq는 따로 설치하지 않아도 된다는 말인가요? 그러면 Makefile 내부에서 이 부분을 참조하라는 문구를 지우기만 하면 될까요?
4. libnfnetlink.a 파일은 없지만, 2번과 동일하게 la 확장자로 된 동일한 파일명을 가진 파일은 있었습니다. 이것도 Makefile 내부에서 la 확장자로 수정하면 되는건지 모르겠습니다.
여러가지를 한번에 여쭤봐서 죄송합니다.
리눅스에 대한 지식이 많이 부족하네요... 부디 도움 부탁드리겠습니다.ㅠ
일단, .a 파일을 찾는 것을 보니,
일단, .a 파일을 찾는 것을 보니, Makefile에서 .a 파일을 직접 기록한 것 같네요.
요즘의 배포본들은 대부분 static library를 패키지에 포함시키지 않고 있습니다. 그러므로, Makefile에서 일단, /path/libxxx.a 라고 되어 있는 부분을 -lxxx 정도로 수정해 보세요. (동일한 경로에 libxxx.a 대신 libxxx.so가 있을 경우 입니다. 만약 libxxx.so 도 없다면, 해당 library가 존재하지 않는 것입니다.)
-lxxx 가 무슨 말씀이신지 모르겠습니다ㅠㅠ
답변 너무 감사드립니다
그런데 -lxxx 가 정확히 무슨 말씀이신지 모르겠습니다.
libxxx.a -> lxxx로 하라는 말씀이신가요?
-l은 gcc에서 library를 link하는 옵션
-l은 gcc에서 library를 link하는 옵션 입니다. 그리고 보통 library는 libNAME.so(dynamic) 또는 libNAME.a(static)의 파일 이름을 가지는데, -l옵션으로 해당 라이브러리를 link할 때는 library NAME만 사용하면 됩니다. (-lNAME)
즉,
와 같이 하고 있다면,
와 같이 수정해 보라는 의미 입니다.
la파일에 관해서는 kldp 라는 사이트에 이런게
la파일에 관해서는 kldp 라는 사이트에 이런게 있네요
좋은 사이트인 것 같습니다
https://kldp.org/node/22493
openssl 빌드 후에 인스톨을 해보시면 아시겠지만 얘도 버전에 따라서 디렉토리랑 파일이름 바뀐게 좀 있습니다
골까는데요 Makefile을 직접 분석해서 뭐가 어디로 갔는지 찾는 것도 도움이 되실껍니다
예를 들어 페도라 구버전 패키지에는 openssl 인스톨 경로 설정이 공식홈페이지 소스랑 다르다던지(당연한건가요?)
정확히 기억이 안나는데 한 번 임시 디렉토리로 설치 경로 잡고 빌드 후 인스톨 해보세요
그 다음 그 임시디렉토리에서 어떻게 설치되나 구조 보시는 것도 좋아요
저도 예전에 삽질했던 기억이 나서리 ㅎㅎㅎ
댓글 달기