Skip to content

Mac M1: Undefined symbols for architecture arm64 when trying to use cs50.h #334

@rob-scheepens

Description

@rob-scheepens

@zizlog @HoonyHoney-91: as follow-up to:

I don't think it solves the issue.
Although it works using your suggestion, it fails using make, giving the error @HoonyHoney-91 points out. I'm having the same issue as him.

Originally posted by @zizlog in #212 (comment)

On my Mac M1 I got a similar error message:

rob@TJYV4J34RJ ~ % make hello
cc     hello.c   -o hello
Undefined symbols for architecture arm64:
  "_get_string", referenced from:
      _main in hello-f3db2a.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [hello] Error 1

The mention of clang made me suspicious, as I was under the impression that gcc was being used. When running gcc indeed a reference to clang comes up:

rob@TJYV4J34RJ ~ % gcc
clang: error: no input files

Digging a bit led me to https://stackoverflow.com/questions/64992467/mac-clang-installation-seems-to-override-gcc-install. The comments in there made me check the version of make I was using:

rob@TJYV4J34RJ ~ % /usr/bin/make -v
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.

That seemed pretty ancient, checking the versions on https://ftp.gnu.org/gnu/make/. After running "brew install make", I now got:

rob@TJYV4J34RJ ~ % make -v
GNU Make 4.4.1
Built for x86_64-apple-darwin23.4.0
Copyright (C) 1988-2023 Free Software Foundation, Inc.

Seeing this caveat made me run "export PATH="/usr/local/opt/make/libexec/gnubin:$PATH"":

==> Caveats
GNU "make" has been installed as "gmake".
If you need to use it as "make", you can add a "gnubin" directory
to your PATH from your bashrc like:

    PATH="/usr/local/opt/make/libexec/gnubin:$PATH"

Now, when running "make hello" it works, without having to add anything special to link cs50 as make now invokes gcc with the right parameters, just like when using a Makefile:

rob@TJYV4J34RJ ~ % make hello 
gcc -Wall -Wextra -std=c11 -o hello hello.c -lcs50
rob@TJYV4J34RJ ~ % 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions