2012-12-03 49 views
6

Tôi đang cố gắng tìm hiểu C++ sâu hơn bằng cách đọc nguồn của STL cũng như gỡ lỗi nó, vì vậy tôi muốn liên kết libstdc++ tĩnh với chương trình của tôi, và nó hoạt động tốt bằng cách sử dụng g++. Tuy nhiên, làm thế nào tôi có thể đạt được điều tương tự với clang++ trong llvm?Làm thế nào để liên kết libstdC++ tĩnh với clang ++

Nói cách khác, câu hỏi là, clang++ tương đương với -static-libgcc là gì?

Makefile Tôi đang sử dụng

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

Tôi không nghĩ tĩnh liên kết là những gì bạn cần. Bạn cần phải có thông tin gỡ lỗi cho thư viện, cho dù đó là tĩnh hay động. Bạn có thể tìm thấy điều này ở những nơi khác nhau trong các bản phân phối Linux khác nhau; một số có thư viện tĩnh với thông tin gỡ lỗi, một số có thư viện được chia sẻ chưa được chia sẻ ở đâu đó, một số chỉ có thông tin gỡ lỗi cho thư viện được chia sẻ (ví dụ: Debian/Ubuntu thường làm điều này). –

+0

Tôi đã thử trong g + +, và các công trình liên kết tĩnh, và tôi đoán đó là vì libstdC++ của tôi không bị tước bỏ trong khi libstdC++. Bạn có nghĩa là tôi nên tìm một thư viện được chia sẻ mà không bị tước bỏ? – Haocheng

Trả lời

3

Lá cờ bạn đang tìm kiếm, trong cả hai GCC và Clang, là: -static-libstdc++

+1

Điều này đưa ra một cảnh báo "đối số không được sử dụng trong quá trình biên dịch: '-static-libstdC++'" trong Clang 4.2. – vitaut

+1

clang ++ phiên bản 4.2.1 trên CentOS 7 nói 'clang: warning: đối số không được sử dụng trong quá trình biên dịch: '-static-libstdC++'' và liên kết tĩnh không xảy ra - có cách nào sửa lỗi không? – scrutari

+1

Đây là cờ thời gian liên kết, không phải cờ thời gian biên dịch. Nếu bạn nhìn vào câu hỏi, cờ '-static-libgcc' được thêm vào biến' LDFLAGS', đây cũng là nơi mà nó sẽ được thêm vào. –

Các vấn đề liên quan