1

わかりました、私は今2日間の解決策を探しています。問題を解決するものが見つかりませんでした。

現在何が起こっているのですか?そこで、g++を使用してLinuxMint 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」をスローします。いくつかのWebページからサンプルコードをコピーしてコンパイルしようとしましたが、常に同じ結果になりました。

面白いのは、do libdl.so(-ldl)をリンクして、.soと関数をロードできることです。私は何が間違っているのですか?

質問を正しく定式化できればと思います。私がしなかったかどうか教えてください。:)

4

2 に答える 2

4

次を使用する必要があります。

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

また

g++ main.cpp -o foo libfoo.so
于 2012-11-06T12:25:41.653 に答える
2

あなたはあなたのfooコンパイル/リンクがであると述べます、g++ main.cpp -o foo -L -lfooそしてこれは問題がどこにあるかです。この-Lオプションには、リンカにライブラリを検索するための追加のディレクトリを与えるパラメータが必要ですが、指定していません。したがって、あなたの場合、リンカ-lfooは、リンクするライブラリではなく、検索するディレクトリの名前であると考えます。

に変更-Lする-L.と、機能するはずです。

詳細については、このドキュメントを参照してください

于 2012-11-06T12:26:32.923 に答える