2012-04-14 32 views
7

Tôi biết rằng trước đây có một tùy chọn -fprefix-function-name sẽ thêm tiền tố vào tất cả các ký hiệu được tạo, nó dường như không phải là một phần của gcc nữa. Có cách nào khác để làm điều này?Làm thế nào tôi có thể nhận được gcc để thêm tiền tố vào tất cả các tên biểu tượng

+5

Tại sao bạn cần thực hiện việc này? Có lẽ bằng cách sử dụng một không gian tên sẽ giải quyết probem của bạn? –

+0

Tôi đang biên dịch mã tôi nhận được từ người khác. Mã này là đa luồng và nó đang cố gắng sử dụng một thư viện cũ, không an toàn, C. Giải pháp được tìm thấy bởi người viết ứng dụng này là có nhiều bản sao của thư viện C, mỗi thư viện có một tiền tố khác nhau với tên biểu tượng của nó. Sau đó, mỗi chuỗi của ứng dụng gọi một phiên bản khác của hàm. Vì vậy, ví dụ, nếu thư viện cũ có một funcion oldlib_func, sẽ có các phiên bản v1_oldlib_func, v2_oldlib_func để thread số 1 sẽ gọi v1_oldlib_func và thread số 2 sẽ gọi v2_oldlib_func. – user1333800

+0

Người viết ứng dụng phải tạo các phiên bản khác nhau của thư viện cũ với các tiền tố này, tôi không nhận được phần mã đó nên tôi phải lấy mã thư viện gốc và tìm cách thêm tiền tố cho tên biểu tượng. – user1333800

Trả lời

11

Tôi tin rằng this answer sẽ cung cấp cho bạn giải pháp.

Nói tóm lại, bạn có thể 'prefix' biểu tượng trong một thư viện hiện có sử dụng objcopy như thế này:

objcopy --prefix-ký tự = foo_ foo.o

3

* EDIT: George Skoptsov's solution ' s tốt hơn so với tôi :) Các thủ thuật nm có thể có ích mặc dù.


Đây không phải là chính xác những gì bạn đang tìm kiếm, nhưng tôi đã phải làm một cái gì đó tương tự trong quá khứ (đổi tên những biểu tượng xuất bởi một thư viện)

Nếu bạn biết tên của các biểu tượng mà bạn muốn xác định lại bạn có thể thử sử dụng objcopy --redefine-syms old=new. Xem các trang của người đàn ông của objcopy để biết thêm chi tiết về đầu vào (objcopy có thể ghi đè lên tập tin của bạn vì vậy hãy cẩn thận với điều đó)

Nếu bạn không biết tên của biểu tượng bạn có thể thử sử dụng nm. Một lần nữa, vì tôi không chắc chắn bạn đang tìm kiếm loại biểu tượng nào, các trang của người đàn ông có lẽ sẽ là đặt cược tốt nhất của bạn.

+1

Tôi "yêu" cách một lệnh gọi là 'objcopy' không thực sự tạo ra một bản sao. – Puppy

+1

@DeadMG: nó * có thể * tạo ra một bản sao (và không, nội bộ), nhưng rõ ràng sửa đổi tại chỗ là quá hữu ích một tính năng không để thêm nó. :) – ams

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