Linux の共有ライブラリに関連する多くの質問があることは承知していますが、Linux で単純な動的ライブラリを作成するのに苦労して 1 日を過ごすのにうんざりしているためかもしれません (Windows では 10 分もかからなかったでしょう)。この場合どうなるか。そのため、ビルド時にリンクされ、実行時に使用されるライブラリを作成しようとしています (つまり、静的ライブラリではなく、実行可能ファイルに組み込まれるライブラリではありません)。今のところ、単純な関数が含まれています。これらは私のファイルです:
1.
// gugulibrary.cpp
// This is where my function is doing its job
#include "gugulibrary.h"
namespace GuGu {
void SayHello() {
puts("Hello!");
}
}
2.
// gugulibrary.h
// This is where I declare my shared functions
#include <stdio.h>
namespace Gugu {
void SayHello();
}
3.
// guguapp.cpp
// This is the executable using the library
#include "gugulibrary.h"
int main() {
GuGu::SayHello();
return 0;
}
これは私が自分のプロジェクトをビルドしようとする方法です (そして、これが間違っていると思います):
gcc -Wall -s -O2 -fPIC -c gugulibrary.cpp -o gugulibrary.o
ld -shared -o bin/libGugu.so gugulibrary.o
gcc -Wall -s -O2 guguapp.cpp -o bin/GuGu -ldl
export LD_LIBRARY_PATH=bin
これは .sh ファイルとして保存され、ターミナルでクリックして実行します。ライブラリをリンクしようとしたときに発生するエラーは次のとおりです。
/tmp/ccG05CQD.o: In function `main':
guguapp.cpp:(.text.startup+0x7): undefined reference to `SayHello'
collect2: ld returned 1 exit status
そして、これが私が迷っているところです。今のところ、ライブラリを実行可能ファイルと同じフォルダーに配置したいのですが、作成方法がわからないシンボル/定義ファイルなどが必要になるかもしれません。ご協力いただきありがとうございます!