0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

macOS で argp.h が存在しないというエラーが出たときの対処法

Posted at

Macで argp.h がないと言われたら

MacOSで、C/C++で書かれたLinux向けのツールをコンパイルしていたら、

fatal error: 'argp.h' file not found
#include <argp.h>
         ^~~~~~~~
1 error generated.

こんな感じのエラーが出現した。
これは、コマンドライン引数を解析するライブラリの、argp.h がないことを意味する。

解決策

実は、homebrewでインストールすることができる。

brew install argp-standalone

インストールしたら、ファイルを確認してみよう。

brew ls argp-standalone
/opt/homebrew/Cellar/argp-standalone/1.3/include/argp.h
/opt/homebrew/Cellar/argp-standalone/1.3/lib/libargp.a
/opt/homebrew/Cellar/argp-standalone/1.3/sbom.spdx.json

特に .pc ファイルなどはないので、pkg-config などは使う事ができない。
そこで、直接パスを指定する。

cc hoge.c \
  -largp \
  -L /opt/homebrew/Cellar/argp-standalone/1.3/lib/ \
  -I /opt/homebrew/Cellar/argp-standalone/1.3/include/ \
  -o hoge

上記のコマンドが実際に動作することを確認するために、ChatGPTに argp.h を利用した簡単なコードを書いてもらって実際にコンパイルできることを確かめた。この記事は以上です。

#include <stdio.h>
#include <argp.h>

static struct argp_option options[] = {
    {"name", 'n', "NAME", 0, "Name to display"},
    {0}
};

struct arguments {
    char *name;
};

static error_t parse_opt(int key, char *arg, struct argp_state *state) {
    struct arguments *arguments = state->input;
    switch (key) {
        case 'n':
            arguments->name = arg;
            break;
        default:
            return ARGP_ERR_UNKNOWN;
    }
    return 0;
}

static struct argp argp = {options, parse_opt, 0, 0};

int main(int argc, char **argv) {
    struct arguments arguments;
    arguments.name = "";
    argp_parse(&argp, argc, argv, 0, 0, &arguments);
    printf("Name: %s\n", arguments.name);
    return 0;
}
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?