C program fails to link with math library

Stuart McGraw smcg4191 at mtneva.com
Tue Dec 29 02:08:45 UTC 2020


Well, that was simple! :-)  Thanks so much, I'm embarrassed to say how long it probably would have taken to figure that out given a life long habit of (almost) always putting options in front of arguments.  And, yup, I do use -o in the Makefile, I just tried to maximally simplify for posting.  Thanks.

On 12/28/20 6:12 PM, Peter Teuben wrote:
> some linkers are not smart, so put it behind.
> 
> But also, please use the -o flag to give it a real name. otherwise it's call a.out (don't ask), so
> 
>      gcc test.c -o test -lm
> 
> would be my recommendation, but if you like less typing, the -o is optional (but what if you have 2 tests :-)
> 
> 
> On 12/28/20 8:01 PM, Stuart McGraw wrote:
>> It's been many years since I've done anything with C but I am trying
>> to recompile an old C program on Ubuntu-18.04 and am having a problem
>> with libraries.
>>
>> When I try to compile this program, test.c:
>>
>>   #include <math.h>
>>   int main (int argc, char **argv) {
>>       double a=1.0, b;
>>       b = sin (a); }
>>
>> with the command:
>>
>>   gcc -lm test.c
>>
>> I get errors:
>>
>>   /tmp/ccdASNYu.o: In function `main':
>>   test.c:(.text+0x2a): undefined reference to `sin'
>>   collect2: error: ld returned 1 exit status
>>
>> The above program and command are (simplified versions for exposition
>> of) what is used in my Makefile and worked six or so years ago on a
>> Fedora system.  As far as I know I've done no messing with C or
>> linker configuration and have no weird environment variables that
>> would affect them.  Isn't libm a standard library that shouldn't
>> require any magic beyond "-lm" to use?
>>
>> What am I doing wrong?





More information about the ubuntu-users mailing list