g++ 컴파일시 제 개인 라이브러리를 옵션 적지않고 자동으로 링크시키려면
글쓴이: portugaltheman / 작성시간: 금, 2020/01/03 - 8:06오후
어떻게 하나요? 책보고 배운것은 g++ -Idirectory -Ldirectory -o hello hello.cpp -lstuff 여기까지 인데
g++ -o hello hello.cpp 만 써도 표준 라이브러리 헤더를 인클루드 하면 자동으로 링크되는것처럼, %HOME%\include 에 있는 제가 작성한 libstuff.h를 인클루드하면 %HOME%\lib 에 있는 제 개인 라이브러리를 링크되게하려면 어떻게 설정하면 되나요?
Forums:
http://www.mingw.org/wiki
http://www.mingw.org/wiki/HOWTO_Use_the_GCC_specs_file 에 대략의 방법이 적혀있습니다.
헤더와는 아무 상관없습니다.
pre-processor, compiler, assembler, linker 를 순서대로 실행해주는 단순 wrapper 에 불과할 뿐인 gcc 혹은 g++ 프로그램의 설정파일을 만들어주면 됩니다.
답변 감사합니다. 제가 글보고 따라햇는데 안되네요
시키는대로 cpp: 밑에 -I e:\home\include 적고 link_libgcc: 밑에 -L e:\home\lib 적고 안되길래 중간에 빈칸 없애도 보고 \ -> / 바꿔도보고 뭘 해도 안됨...
libtest.cpp 코드안에 #include "libmath.h" 적고 e:\home\include 안에 libmath.h 넣어놓고 g++ -o libtest libtest.cpp 하면 안되구요
g++ -Ie:\home\include -Le:\home\lib -o libtest libtest.cpp -lmath
다치니까 되네요..
혹시 cpp: 가 아니라 cc1plus: 밑에 써야되나 싶은데 텅 비어 잇어서 뭐 추가하니까 에러가 뜨네요.. 이건 손댈줄 모르겟어요..
링크한 문서는 그걸 보고 따라하시라고 알려드린 것이
링크한 문서는 그걸 보고 따라하시라고 알려드린 것이 아니라, 본인이 모르고 있는 것이 뭔지부터 알고, 그걸 찾아서 공부하시라는 뜻이었습니다.
자기가 뭘 모르는지조차도 모르고 있다는 걸 확실히 알고 계신 것 같아서 가장 유용해보이는 걸 찾아 알려드렸는데, 결국 따라하기로 흘렀고 피차 시간만 낭비했네요.
호기심은 좋은 것이라 생각합니다. 모르는 단어 같은 것을 위주로 검색해서 매뉴얼을 찾아 읽어보세요.
GCC 의 specs 편집은 평소엔 아무 곳에도 쓸 일이 절대로 없는, 그리고 절대로 없어야만 할 일이지만,
크로스 컴파일용 툴체인을 가져와서 여러가지 라이브러리 같은 것들을 추가한 본인만의 SDK 패키지를 만들고 싶다면 이야기가 달라집니다.
원래 옵션 다 써줘야 하는거고, 옵션 안 쓰면
원래 옵션 다 써줘야 하는거고, 옵션 안 쓰면 에러납니다. 그렇게 수작업으로 하기가 곤란하니,
빌드 자동화, make, Makefile, autotools, cmake, meson, ninja 등에 대해 알아보세요.
라이브러리를 만들어서 자동으로 링크되게 하는 작업 하나하는데
알아야 하는게 너무 많군요 ㅎㅎ 뭐 다 공부해보죠..
...
처음엔 그거 다 아실 필요 없고, Makefile을 어떻게 만드는지만 찾아보세요.
서너 줄이면 됩니다.
(그 다음엔 요구 사항이 복잡해질 때마다 배우면서 살을 붙여나가면 됩니다.)
...
질문이 좀 분명하지 않습니다. -L, -l 옵션을 제거해서 얻고자 하는 게 무엇인지요? 또, -L, -l 없이 빌드가 가능하게 한다는 게, 글쓰신 분 개발 환경에서만의 얘기인가요, 아니면 글쓰신 분이 배포한 소스를 받아 빌드하는 모든 사람들에게 가능해야 한다는 것인지요?
gcc는 해당 라이브러리 위치를 알아야 합니다. 또 무슨 라이브러리를 링크해서 실행 파일을 만들지도 알아야 하구요. 전자든 후자든 미리 약속된 일종의 preset이 있습니다. -l, -L 없이 되게 하려면 그 preset을 변경시켜 주시면 되겠죠. 그리고 -l과 -L은 서로 다른 두 개의 옵션이므로 해결책도 서로 다를 수 있습니다.
cpp나 cc1plus가 아니라 링킹 쪽 옵션을 스펙 파일에서 변경해야 되겠죠.
그런데 이렇게 변경해서 얻는 이점이 뭔지 저는 잘 모르겠네요. 소스 코드를 배포받은 사람이 빌드할 때는 어차피 -spec 옵션을 줘서 빌드하거나 자기 컴파일러 설정 파일을 업데이트 하거나 해야할 것 같습니다. 그거나 -l, -L 넣는 거나 무슨 차이인가요?
대개는 -l, -L 일일이 넣고 빌드하기 싫어하기 때문에 빌드를 돕는 프로그램들이 있습니다. make가 가장 오래 되고 기본적인 것 같은데 그것부터 한 번 읽어보세요. "gcc와 make"라고, 이 kldp 사이트 안에 굉장히 읽기 쉽지만 충실한 내용을 담은 초심자용 make 유저 가이드가 있습니다.
제가 소스를 배포할 정도의 능력은 안되고...
공부중에 알고리즘이나 모듈같은걸 만들어서 표준라이브러리가 작동하는것처럼 저만의 라이브러리를 만들어서, 다른 프로그램을 코딩할 때 #include "mylibrary.h" 이렇게 포함하고 gcc -o hello hello.cpp 이렇게 하면 알아서 링크되게.. 뭐 그런걸 하려구요 모르는게 많지만.. 좀 헛짓거리인가요? 링크할 때 마다 -I -L -l 옵션 다 치기가 좀 그렇잖아요?
원래는 그거 다 쳐야 되는게 맞아요. 그런데 그걸
원래는 그거 다 쳐야 되는게 맞아요. 그런데 그걸 편리하게 해주는 툴이 있어요.
pkg-config 이라는게 있습니다. pkg-config 에 대해 알아보세요.
활용 예.
pkg-config 보다는 https:/
pkg-config 보다는 https://pangtrue.tistory.com/53?category=694727 이 글을 먼저 보시는게 좋을거 같네요.
수많은 방법이 있지만
기본적으로는 그거 말고도 불편한 게 많습니다. 그래서 빌드 시스템이라는 것들이 있고, 언젠가는 필요한 만큼 배우셔야 합니다. 당장 -l과 -L을 덜 치고 싶다면 이런 것도 방법입니다.
이거를 myc++에 복사 & 붙이기 하시고 -lpthread 부분을 원하시는 옵션으로 편집한 다음, /usr/bin 에다 카피하신 후, g++ 대신에 myc++을 쓰세요.
댓글 달기