質問
GitHubで公開されているC言語のライブラリを利用したいと考えています.
ただシンプルにその方法がわからないので教えていただきたいです.
とても簡単に言えば,
Pythonで言うところの pip install
Go言語で言うところの go get
は今回の場合どうすればよいのか知りたいです.
もちろんこんな簡単にはいかないとは思いますが..
一応以下に試したことを載せていますので,どこまであっていて,どこから間違っているのか
または「こっちのほうが簡単だよ」的な方法があれば教えていただけるとありがたいです
環境
Docker on macOS
Docker
1FROM ubuntu:latest 2 3RUN apt update &&\ 4 apt install -y build-essential git
実現したいこと/試したこと
GitHubで公開されているC言語のライブラリを利用したいと考えています.
つまり自分が書くソースコードでincludeして,当該ライブラリに実装された関数を利用したいわけです.
利用したいのはこのライブラリです
一般的にライブラリをインストールする方法として,以下のコマンドが紹介されているものを複数目にしましたが,これはAutotoolsを利用して開発?されたライブラリを用いる場合(らしい)です.
sh
1./configure 2make 3make install
ただ利用したいライブラリではMakefileはありますが,どうやらAutotoolsは利用されていないようです.
そこで試行錯誤の末, 以下のコマンドでcurve25519/source/build64
配下に複数の.oファイルと1つの.aファイルが生成されるところまできました.
sh
1cd /opt 2git clone https://github.com/msotoodeh/curve25519 3cd curve25519 4make 5cd source 6make
これでビルドまではできたかなと考えています.
ただこれをインストールして使うためにさらにいろいろ調べ, ヘッダファイルを/usr/local/include
配下, .aファイルを/usr/local/lib
配下に置くことがこの場合の「インストール」になるという様な記事(ちょっとどれだったか忘れました)を読んだので更に以下のようなコマンドを実行しました
sh
1cp build64/libcurve25519.a /usr/local/lib/ 2cp *.h /usr/local/include/ 3cp ../include/*.h /usr/local/include/
これでインストールが完了したはずなので,ひとまず利用できる状態になっていることを確かめるために,test/curve25519_test.c
を参考に以下のソースコードのコンパイルを試みました.
c
1//main.c 2#include<stdio.h> 3#include<curve25519_dh.h> 4#include<BaseTypes.h> 5 6 7void ecp_PrintHexBytes(IN const char *name, IN const U8 *data, IN U32 size) 8{ 9 printf("%s = 0x", name); 10 while (size > 0) printf("%02X", data[--size]); 11 printf("\n"); 12} 13 14 15int main() { 16 unsigned char alice_public_key[32]; 17 unsigned char alice_secret_key[32] = { /* #1234 */ 18 0x03,0xac,0x67,0x42,0x16,0xf3,0xe1,0x5c, 19 0x76,0x1e,0xe1,0xa5,0xe2,0x55,0xf0,0x67, 20 0x95,0x36,0x23,0xc8,0xb3,0x88,0xb4,0x45, 21 0x9e,0x13,0xf9,0x78,0xd7,0xc8,0x46,0xf4 }; 22 23 ecp_PrintHexBytes("Alice_secret_key", alice_secret_key, 32); 24 25 curve25519_dh_CalculatePublicKey(alice_public_key, alice_secret_key); 26 ecp_PrintHexBytes("Alice_public_key", alice_public_key, 32); 27 28 return 0; 29}
sh
1gcc -lcurve25519 main.c
念の為以下も試行
sh
1gcc -I/usr/local/include -L/usr/local/lib -lcurve25519 main.c
するとどちらでも以下のエラーが出力されます.
/tmp/ccxzk1Qg.o: In function
main': main.c:(.text+0x125): undefined reference to
curve25519_dh_CalculatePublicKey'
collect2: error: ld returned 1 exit status
回答1件
あなたの回答
tips
プレビュー