簡體   English   中英

使用靜態庫構建共享庫時,符號的多個定義

[英]Multiple definition of a symbol while building a shared library with static libraries

我必須從多個目標文件構建一個共享庫。 假設對象文件Obj1.oObj2.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM