mac osで openssh の 8.3以前をコンパイルしようとすると"compiler cannot create working executables"になる理由

error: *** compiler cannot create working executables, check config.log *** ・ Issue #7 ・ rdp/homebrew-openssh-gssapi ・ GitHub

#60959 (openssh-8.1p1_9+gsskex+kerberos5+xauth: compiler cannot create working executables) – MacPorts

不具合自体はあちこちで散見するのだけど、openssh 8.4p1 で直ったという事以外情報がなかったので、自分で解決してみた。

conftest.c:70:3: error: implicitly declaring library function 'exit' with type 'void (int) __attribute__((noreturn))' [-Werror,-Wimplicit-function-declaration]
 exit(0);
 ^
conftest.c:70:3: note: include the header <stdlib.h> or explicitly provide a declaration for 'exit'

1 warning and 1 error generated.

エラーメッセージで重大なのはこの部分だろう
exit()構文があるけど、 <stdlib.h> がインクルードされていない じゃないかと言ってる。

というわけで、configure を編集して追加してみた

追加するのは3か所...と思ったら20か所くらい直さないと駄目なようだ
さもなくばConfigureが通ってもmakeが通らない。

#include <mach-o/dyld.h>

main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16))

#include <stdio.h>
int main () {
exit(0);
;
return 0;
}

#include <libgen.h>
#include <string.h>

int main(int argc, char **argv) {
char *s, buf[32];

strncpy(buf,"/etc", 32);
s = dirname(buf);
if (!s || strncmp(s, "/", 32) != 0) {
exit(1);
} else {
exit(0);
}
}

#include <sys/types.h>
#include <dirent.h>
int
main ()
{

struct dirent d;
exit(sizeof(d.d_name)<=sizeof(char));

;
return 0;
}

#include <stdio.h>
int
main ()
{

int i = H_SETSIZE;
el_init("", NULL, NULL, NULL);
exit(0);

;
return 0;
}

#include <stdio.h>
int
main ()
{

char b[5];
snprintf(b,5,"123456789");
exit(b[4]!='\0');

;
return 0;
}

#include <stdio.h>
#include <sys/fcntl.h>
#include <sys/types.h>
#include <sys/wait.h>

int
main ()
{

pid_t pid;
int fd, ptyfd, ttyfd, status;

pid = fork();
if (pid < 0) { /* failed */
exit(1);
} else if (pid > 0) { /* parent */
waitpid(pid, &status, 0);
if (WIFEXITED(status))
exit(WEXITSTATUS(status));
else
exit(2);
} else { /* child */
close(0); close(1); close(2);
setsid();
openpty(&ptyfd, &ttyfd, NULL, NULL, NULL);
fd = open("/dev/tty", O_RDWR | O_NOCTTY);
if (fd >= 0)
exit(3); /* Acquired ctty: broken */
else
exit(0); /* Did not acquire ctty: OK */
}

;
return 0;
}

 
  :

スクリーンショット 2022-03-18 18.09.12
通るようになった (((・ω・)))

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です