Help us understand the problem. What is going on with this article?

Paiza.ioでGo言語で独自の共有ライブラリを使うには

More than 1 year has passed since last update.

Paiza.ioに用意されていない共有ライブラリを使う準備

使いたい共有ライブラリを作る

linux,amd64であればOK

ネットから落とせるようにする

これをプログラム実行時DLすれば良い。

フツーにCgoで共有ライブラリを扱う際の問題

Paiza.io側に存在しない共有ライブラリを使いたい場合、
cgoでフツーに書くことが出来ない。

フツーの共有ライブラリの使い方

// #cgo LDFLAGS: -L. -lhoge

これだと、リンカが動く際に使いたい共有ライブラリlibhoge.soが
存在しないと動かない。

でも、このlibhoge.soは動かそうとしているGo言語のソースが動いて
初めてダウンロードされ、ローカルから参照可能になる。

dlopenすればいい

例えば、

int foo(char *p)

なる関数が、libhoge.soにあり、これを使いたい場合、
以下の様なコードで動かせる。

/*
#include <dlfcn.h>
static void my_dlopen(char *param) {
    void *handle;
    int (*func)(char*) = dlsym(handle, "foo");
    (*func)(param);
    dlclose(handle);
}
*/
import "C"

注意点

1秒以内にDLから実行までが完了しないと時間切れになり、
実行結果が得られない。

関連投稿

関連記事

kjunichi
WebRubyがきっかけで、mrubyで実装されたhttp2サーバーのtrusterdに絡んだ事をやってみたり、ElectronのIssue眺めたり、手元で動かしたり、node.js関連。WASMも少々。投稿する記事の内容は個人の意見であり、所属する企業の見解を代表するものではありません。
https://abrakatabura.hatenablog.com/
japan-systems
「2019年に50周年を迎えたIT企業です。最先端の技術により全国の企業、官公庁、自治体に多くの実績があります。」
https://www.japan-systems.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away