0

I'm trying different C linear algebra libraries for my projects and now I want to learn BLAS (CBLAS). I am trying to follow the tutorial here. I realised that cblas is already built in the xcode and by adding the flag

gcc foo.c -framework Accelerate

or

gcc foo.c -lcblas

I can remove most of the errors I had before. however there is a final error which I can not find anywhere on the internet.

Undefined symbols for architecture x86_64:
  "_printVector", referenced from:
      _main in blas1C-63e43d.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

I'm not sure where I'm making the mistake but there are a number of possibilities:

  1. I need to instal BLAS/CBLAS from the netlib website. I actually tried to do this but I could manage to build the library from the source code! it would be great if somebody could make a Homebrew formula. then if the original CBLAS library installed then I need to learn about the gcc flags for compiling and how to link the libraries.
  2. or there are syntax differences between the original CBLAS from netlib and the one built in the xcode and I need to change the code.

thanks for your help in advance.

P.S. I'm trying to compile the codes blas1C.c, blaio.c, blaio.h from the page I mentioned.

edit 1: oh my! I just realised that I have made a horrible mistake. the printVector function missing is not part of CBLAS but a function made by the author of the blog. the only thing I had to do was just to compile the blaio.c file as well. so the correct gcc command should be

gcc blas1C.c blaio.c -lcblas

or

gcc blac1C.c blaio.c -framework Accelerate
Foad S. Farimani
  • 12,396
  • 15
  • 78
  • 193

1 Answers1

0

That function comes from the blasio.c in the website and declared in blasio.h You need to build blasio and link to it

Yan Zhou
  • 2,709
  • 2
  • 22
  • 37