Please pay careful attention to what I am saying.
If I comment out the jsr _sqrt in the assembly code so the file will complie, but leave the sqrt() call in the c code in the same file, then the c code generates assembly
; 134: g_sWaveData.ch[index].rms = sqrt(rms / NUMBER_OF_DATA_POINTS_PER_CHANNEL);
; 135:
; 136:
;
0x00000152 0x202EFFE8 move.l -24(a6),d0
0x00000156 0x2400 move.l d0,d2
0x00000158 0xE082 asr.l #8,d2
0x0000015A 0x7217 moveq #23,d1
0x0000015C 0xE2AA lsr.l d1,d2
0x0000015E 0xD082 add.l d2,d0
0x00000160 0x7209 moveq #9,d1
0x00000162 0xE2A0 asr.l d1,d0
0x00000164 0x4EB900000000 jsr _sqrt
0x0000016A 0x2D40FFDC move.l d0,-36(a6)
0x0000016E 0x202EFFC0 move.l -64(a6),d0
0x00000172 0x2D40FFF8 move.l d0,-8(a6)
0x00000176 0x202EFFF8 move.l -8(a6),d0
0x0000017A 0x222EFFF8 move.l -8(a6),d1
0x0000017E 0xE989 lsl.l #4,d1
0x00000180 0x41F900000000 lea _g_sWaveData,a0
0x00000186 0x202EFFDC move.l -36(a6),d0
0x0000018A 0x2180180C move.l d0,(12,a0,d1.l)
0x0000018E 0x4FEF003C lea 60(a7),a7
0x00000192 0x2E1F move.l (a7)+,d7
0x00000194 0x4E5E unlk a6
0x00000196 0x4E75 rts
This results in a call to the long integer version of the sqrt function (NOT A FLOATING POINT CALL). The linker links to
00004CBC 00000040 .text sqrt (C_4i_CF_RegABI_MSL.a w_sqrt.o )
which is a library already in the project.
The library is obviously available. The program compiles, links and executes correctly.
With the jsr _sqrt ( also tried jsr sqrt, jsr w_sqrt and jsr _w_sqrt) in the assembly language the error is generated by the COMPILER not the linker. The fundamental issue is:
How does one make the COMPILER recognize a subroutine name in an assembly program where the subroutine is outside the file.