2012-12-03 13 views
6

Próbuję nauczyć się C++ głębiej, czytając źródło STL, a także debugując go, więc chcę połączyć statycznie libstdc++ z moim programem i działa dobrze przy użyciu g++. Jednak, jak mogę osiągnąć to samo z clang++ w llvm?Jak połączyć libstdC++ statycznie z clang ++

Innym sposobem jest pytanie: co to jest odpowiednik -static-libgcc?

Makefile Używam

CXX=g++ 
CC=g++ 
LDFLAGS=-g -O0 -static-libgcc 
CFLAGS=-O0 -Wall 
CXXFLAGS=$(CFLAGS) 
+0

Nie sądzę łączenie statyczne jest to, czego potrzebujesz. Musisz mieć informacje debugowania biblioteki, bez względu na to, czy jest to statyczna czy dynamiczna. Możesz znaleźć to w różnych miejscach w różnych dystrybucjach Linuksa; niektóre mają statyczną bibliotekę z informacjami debugowania, inne mają gdzieś ukrytą bibliotekę współdzieloną, inne mają po prostu informacje debugowania dla wspólnej biblioteki (np. Debian/Ubuntu zwykle to robią). –

+0

Próbowałem w g ++, i statyczne łącze działa, i myślę, że to dlatego, że mój libstdC++. A nie jest rozebrany podczas libstdC++. Dylib jest. Czy masz na myśli, że powinienem znaleźć wspólną bibliotekę, która nie jest pozbawiona? – Haocheng

Odpowiedz

3

Flaga szukasz, zarówno GCC i Clang jest: -static-libstdc++

+1

Daje to ostrzeżenie "argument nieużywany podczas kompilacji: '-static-libstdC++'" w Clang 4.2. – vitaut

+1

clang ++ w wersji 4.2.1 na CentOS 7 mówi 'clang: warning: argument nieużywany podczas kompilacji: '-static-libstdC++'' , a łączenie statyczne nie występuje - czy jest jakiś sposób, aby to naprawić? – scrutari

+1

To jest flaga czasu połączenia, a nie flaga czasu kompilacji. Jeśli spojrzysz na to pytanie, flaga '-static-libgcc' zostanie dodana do zmiennej' LDFLAGS', która również powinna zostać dodana. –