[Mac M2 Pro 12CPU, Sonoma 14.3.1, clang++ 15.0.0, FLTK 1.3.9]
アイコン画像作成アプリを久しぶりにビルドすると、png関連のシンボルが見つからずエラーを吐くようになりました。
これまでlibpngのpng.hへアクセスしていたのが、FL/images/png.hを読み込むようになってしまったために起こったトラブルでした。
ヘッダファイルのincludeを絶対パスにすると直りました。
Homebrewのライブラリをアップデートするとバージョン番号が変わるのでMakefileを更新する必要がありますが、それとは関係なく起こったレアなトラブルだったため原因究明に時間が掛かりました。
ld: Undefined symbols:
_fltk_png_create_info_struct, referenced from:
getInfoPNG(char const*) in processImage.o
_fltk_png_create_read_struct, referenced from:
getInfoPNG(char const*) in processImage.o
_fltk_png_destroy_read_struct, referenced from:
getInfoPNG(char const*) in processImage.o
_fltk_png_get_channels, referenced from:
getInfoPNG(char const*) in processImage.o
_fltk_png_get_image_height, referenced from:
getInfoPNG(char const*) in processImage.o
_fltk_png_get_image_width, referenced from:
getInfoPNG(char const*) in processImage.o
_fltk_png_get_x_pixels_per_inch, referenced from:
getInfoPNG(char const*) in processImage.o
_fltk_png_get_y_pixels_per_inch, referenced from:
getInfoPNG(char const*) in processImage.o
_fltk_png_init_io, referenced from:
getInfoPNG(char const*) in processImage.o
_fltk_png_read_png, referenced from:
getInfoPNG(char const*) in processImage.o
_fltk_png_set_sig_bytes, referenced from:
getInfoPNG(char const*) in processImage.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Makefile:53: ImageInspector] Error 1
#ifndef PROCESSIMAGE_H
#define PROCESSIMAGE_H
#include <array>
// FL/imagesのpng.hを避けるため絶対パスに変更
#include "/opt/homebrew/Cellar/libpng/1.6.42/include/libpng16/png.h"
std::vector<std::string> split(std::string, char);
std::string join(const std::vector<std::string>& , const char*);
int checkImage(const char*);
std::array<int,5> getInfoPNG(const char*);
#define SIGNATURE_NUM 8
#endif