[英]Multiple definition of a symbol while building a shared library with static libraries
我必須從多個目標文件構建一個共享庫。 假設對象文件Obj1.o
和Obj2.o
保留在obj_folder下,並且都使用通用函數foo()
。 函數foo()
是在另一個cpp文件中定義的,可以將其稱為foo.cpp。 foo.cpp的對象也位於obj_folder下。
場景如下:
In obj1.cpp
void func1()
{
int timestamp =foo();
}
in obj2.cpp
void func2()
{
int timestamp = foo();
}
這兩個文件的obj1.o和obj2.o分別構建。 我在這里的想法是obj1.o和obj2.o都靜態地為foo()構建代碼,而在構建鏈接器時只是找不到應該從哪個對象中選擇foo()位置。
建立共享對象project.so
我使用以下命令-
gcc -shared -fPIC obj_folder/*.o -o project.so
建立共享對象,我看到錯誤消息-
Multiple definition of foo()
我如何解決此符號沖突並建立共享庫?
foo()的多個定義
我如何解決此符號沖突並建立共享庫?
不幸的是,您沒有提供足夠的信息來回答該問題。
您的描述似乎暗示foo.o
定義了foo
,但是如果是這樣,您將不會得到所得到的鏈接錯誤。
因此,第一步是找出foo
的實際定義位置。 這是這樣做的方法:
nm -A obj_folder/*.o | grep ' foo$'
為了使鏈接錯誤有意義,應該在每個單獨的.o
文件中定義兩個foo
。 鏈接庫時,您必須擺脫其中之一。
PS不要將目錄稱為“文件夾”。
PPS像這樣鏈接一個庫: gcc ... obj_folder/*.o -o project.so
是一個非常糟糕的主意。 學習和使用make
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.