実現したいこと
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を実行し、再度コードを実行したところ、同じエラーが出た。
補足
特になし
回答2件
あなたの回答
tips
プレビュー