簡體   English   中英

g ++自定義動態庫鏈接錯誤未定義符號

[英]g++ custom dynamic library linking error undefined symbol

好的,我現在正在尋找解決方案,持續2天。 我沒有找到任何解決我的問題的方法。

目前發生了什么事? 因此,我嘗試使用g ++在Linux Mint Maya 13上創建一個動態庫(.so)。

foolib.h:

#pragma once
#include <stdio.h>

void foo(
    void
    );

foolib.cpp:

#include "foolib.h"

void foo(
    void
    )
{
   printf ("Hello World!\n");
};

main.cpp:

#include "foolib.h"

int main(
    int    argc,
    char** argv
    )
{
    foo ();
};

我按照以下說明編譯了這些文件:

libfoo.so:

g++ -shared -o libfoo.so -fpic foolib.cpp

foo:

g++ main.cpp -o foo -L -lfoo

創建libfoo.so的工作沒有任何錯誤,但是foo會引發未定義的引用“ foo”。 我從幾個網頁復制了示例代碼,並嘗試對其進行編譯,結果始終相同。

有趣的是,我可以鏈接做libdl.so(-ldl),加載我的.so和我的函數。 我究竟做錯了什么?

我希望我可以正確地提出我的問題。 請告訴我是否沒有。 :)

您應該使用:

g++ main.cpp -o foo -L./ -lfoo

要么

g++ main.cpp -o foo libfoo.so

您聲明foo編譯/鏈接是通過g++ main.cpp -o foo -L -lfoo ,這就是問題所在。 -L選項需要一個參數,該參數為鏈接程序提供一個用於搜索庫的附加目錄,但您沒有提供該目錄。 因此,在您的情況下,鏈接器認為-lfoo是要搜索的目錄的名稱,而不是要鏈接的庫的名稱。

更改-L-L. 它應該工作。

有關更多信息,請參見本文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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