質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

GD(Graphics Library)

GD(Graphics Library)は、線や多角形、円、テキストなどを書くことができるライブラリです。グラフなどを作成する際に利用されます。

Q&A

解決済

2回答

291閲覧

MacBook Air(M1, 2020)でlibgdを使う方法

kouchakaden

総合スコア3

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

GD(Graphics Library)

GD(Graphics Library)は、線や多角形、円、テキストなどを書くことができるライブラリです。グラフなどを作成する際に利用されます。

0グッド

0クリップ

投稿2024/06/26 05:14

編集2024/06/26 05:17

実現したいこと

MacBook Air(M1, 2020)でlibgdを使えるようにしたい

発生している問題・分からないこと

C言語でlibgdを使ったコードを実行したところ、

shell

1(base) (ユーザー名)@MacBook-Air libgd % gcc gray.c -lgd 2ld: warning: ignoring file '/usr/local/lib/libgd.3.dylib': found architecture 'x86_64', required architecture 'arm64' 3Undefined symbols for architecture arm64: 4 "_gdImageColorExact", referenced from: 5 _main in gray-828ea4.o 6 "_gdImageCreateFromJpeg", referenced from: 7 _main in gray-828ea4.o 8 "_gdImageCreateTrueColor", referenced from: 9 _main in gray-828ea4.o 10 "_gdImageGetPixel", referenced from: 11 _main in gray-828ea4.o 12 "_gdImageJpeg", referenced from: 13 _main in gray-828ea4.o 14 "_gdImageSetPixel", referenced from: 15 _main in gray-828ea4.o 16ld: symbol(s) not found for architecture arm64 17clang: error: linker command failed with exit code 1 (use -v to see invocation)

というエラーが発生した。

該当のソースコード

C

1// 入力カラー画像をグレー画像に変換するプログラム 2#include <gd.h> 3#include <stdio.h> 4#include <stdlib.h> 5#include <string.h> 6 7int main(const int argc, const char *argv[]) { 8 FILE *out, *in; 9 10 if (argv[1] == NULL || argv[2] == NULL || !strcmp(argv[1], argv[2])) { 11 printf("argument error\n"); 12 exit(-1); 13 } 14 15 // 第一引数で指定されたファイルを読み出し用にオープン 16 if ((in = fopen(argv[1], "r")) == NULL) { 17 printf("file open error for %s\n", argv[1]); 18 exit(-1); 19 } 20 // 第二引数で指定されたファイルを書き出し用にオープン 21 if ((out = fopen(argv[2], "wb")) == NULL) { 22 printf("file open error for %s\n", argv[2]); 23 exit(-1); 24 } 25 26 // im に画像を読み込み 27 gdImagePtr im = gdImageCreateFromJpeg(in); 28 29 // 入力画像のサイズを取得 30 int width = gdImageSX(im); 31 int height = gdImageSY(im); 32 33 // 新しい画像を用意 34 gdImagePtr im_new = gdImageCreateTrueColor(width, height); 35 36 for (int i = 0; i < width; i++) { 37 for (int j = 0; j < height; j++) { 38 // im の (i,j) におけるカラーインデックスの取得 39 int pixel = gdImageGetPixel(im, i, j); 40 41 // im の (i,j) における r,g,b の値を取得 42 int r = gdImageRed(im, pixel); 43 int g = gdImageGreen(im, pixel); 44 int b = gdImageBlue(im, pixel); 45 46 // r,g,b 値から輝度を計算 47 int y = 0.299 * r + 0.587 * g + 0.114 * b; 48 49 // y 値から色を color に設定 50 int color = gdImageColorExact(im_new, y, y, y); 51 52 // im_new の (i,j) におけるピクセル値を color で設定 53 gdImageSetPixel(im_new, i, j, color); 54 } 55 } 56 57 gdImageJpeg(im_new, out, -1); 58 59 fclose(in); 60 fclose(out); 61 62 return 0; 63} 64

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

ターミナルでbrew install gdを実行し、再度コードを実行したところ、同じエラーが出た。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2024/06/26 06:08 編集

なにか妙な方法でHomebrewのセットアップしませんでしたか?
int32_t

2024/06/26 06:28

両方入れるのはトラブルの元です。arm64 版だけにしましょう。
int32_t

2024/06/26 09:19

エラーメッセージは変化ないですか?
kouchakaden

2024/06/26 09:40

何も変化ありませんでした。ですが、libgdについて調べていたところ、https://libgd.github.io/ というサイトからダウンロードするという方法があることを知り、試してみたところ、エラーが消え、実行できるように なりました。ありがとうございました。
guest

回答2

0

自己解決

https://libgd.github.io/ というサイトから適切なバージョンのlibgdをダウンロードし、ターミナル上で

sh

1./configure; make; make install;

と打ち、実行するとlibgdが使えるようになりました。

投稿2024/06/26 09:42

kouchakaden

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

arm64版とx86_64版の2つがあることを後で知り、どちらもバージョンもダウンロードしました。

ld: warning: ignoring file '/usr/local/lib/libgd.3.dylib': found architecture 'x86_64', required architecture 'arm64'

gccとldがarm64用、libgd が x86_64 用になっているようです。

ターミナルでbrew install gdを実行し、再度コードを実行したところ、同じエラーが出た。

brewコマンドは x86_64 用が優先されているのでしょう。

特別な理由がない限り、arm64版とx86_64版の両方のHomebrewを入れる必要はありませんし、両方入れるとトラブルの元になります。x86_64版のHomebrewは消しましょう。

投稿2024/06/26 07:24

int32_t

総合スコア21599

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kouchakaden

2024/06/26 08:07

分かりました。消してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問