2009-10-22 3 views
2

리눅스에서 Google의 tcmalloc을 실험하고 싶습니다 ... 여기에 거대한 프로젝트가 있는데, 수백 개의 qmake가 Makefile을 생성했습니다 ... gcc가 tcmalloc에 ​​대해 전 세계적으로 링크되도록하는 방법을 찾고 싶습니다. libc와 함께) ... 가능합니까? 아니면 모든 Makefile을 편집해야합니까?Google의 malloc을 전 세계에서 사용하고 있습니까?

...

(나는 그들 수백 있기 때문에 모든 프로 파일을 편집하지 않으려는 것) (또한, 우리가 이미 LD_PRELOAD 방법을 시도했다가 그것을 아주 잘 작동하지 않습니다)

+0

qmake의 .pro 파일을 편집 할 수 없습니까? – liori

+1

LD_PRELOAD에 대한 추가 정보가 올바르게 작동하지 않습니까? LD_PRELOAD를 사용하려고하면 정확히 무엇을 경험하고 있습니까? –

+1

글쎄, 응용 프로그램의 일부분 만 tcmalloc을 사용하는 것처럼 보입니다 ... 광대 한 범위의 allocs는 tcmalloc에 ​​없었습니다 ... ltrace를 사용하여이 문제를 확인하려고했지만 ltrace를 상당히 빨리 충돌 시켰습니다 (BTW, ltrace는 호출 만 표시 함). qt에 넣고 tcmalloc은 Qt 코드를 보여주는 보고서를 생성합니다 ... 그러나 더 많은 것들이이 응용 프로그램에서 malloc을 호출하고 있습니다 ... – dicroce

답변

4

makefile이 컴파일러에 액세스하는 방법 (gcc/g ++/cc/C++)?

그냥 이름의 경우 (g ++), 그리고 명시 적 경로로 (는/usr/빈/g ++), 당신은 단순히 당신이 선호하는 어떤 디렉토리에 대체 g ++를 작성하고 해당 디렉토리를 앞에 추가 할 수 있습니다 통로.

예 : 만들기   ~/mytmpgccdir/g ++   파일 :

#!/bin/tcsh -f 
exec /usr/bin/g++ -Lfoo -lfoo $*:q 

추가 어떤 엑스트라 (-lfoo -lfoo) 당신이 이전 또는 다른 인수 이후에, 좋아 ($ * : q).

그런 다음 경로에 미리 고정시키고 정상적으로 만듭니다.

#tcsh version 
% set path = (~/mytmpgccdir/ $path:q) 
% make clean 
% make 

p.s. 명시 적 이름 인 경우 명령 행에서이를 대체 할 수 있습니다. 당신이 LD_PRELOAD를 사용한다면

p.p.s, 당신은이 같은 스크립트 프로그램을 실행하기 전에 LD_PRELOAD하는 setenv 할 수 있습니다   하는 모든 GCC = ~/mytmpgccdir/GCC :처럼 뭔가. 그렇지 않으면/bin/ls, make, g ++ 등과 같은 모든 명령에 LD_PRELOAD를 적용하기가 쉽습니다.

+0

굉장!나는이 기회를 줄거야! – dicroce

+0

http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ –

2

먼저 qmake 설명서를 확인하십시오. 특정 라이브러리가 항상에 연결되어야한다 (A .PRO 파일)를 지정하는 쉬운 방법이

또한, 당신은 단지 실험을하고 있기 때문에, 단순히 LD_PRELOAD를 사용하지 - 필요없는 재 컴파일 :.

LD_PRELOAD="/usr/lib/foo/libtcmalloc.so" ./your_program

"your_program"을 Google의 tcmalloc 라이브러리에 연결할 필요는 없습니다.