You should compile with -fPIC. See how to recompile with -fPIC
Non-PIC code needs to be modified when it's relocated to another address. These modifications of the binary code and data are called relocations. There are many different types of relocations. They might involve putting the absolute address of a symbol into a data word, or modifying some of the bits of a MOVW or MOVT instruction to place part of a constant into the instruction itself. That latter one is your problem.
The static linker will do all of these relocations when you link your executable. If you use a shared library, then the dynamic linker must do them when the executable is run and dynamically linked to shared library.
Some types of relocations, called text relocations or TEXTRELS, might not be supported by the dynamic linker. These involve modifying the text segment, with the actual code, and putting values inside instructions. Since it modifies the code, that part of the shared library won't be shared anymore between processes. You're supposed to make the library position independent via -fPIC, so the dynamic linker doesn't need to do text relocations.
It's possible that your previous code didn't cause the compiler to emit anything that needed an unsupported relocation. And then the file you added had something in it that did. For instance, accessing a global variable can trigger this on ARM.
int x = 1;
void foo(void) { x=42; }
Compiles to:
movw r3, #:lower16:x
mov r2, #42
movt r3, #:upper16:x
str r2, [r3]
bx lr
The lower and upper half of the address of x need to be placed into the movw and movt instructions. The dynamic linker doesn't support this. If the code had been compiled with -fPIC (or -mword-relocations), the compiler would produce different output that would not need these relocations.
"protocol.o" has unsupported relocations and before your change it wasn't there, or wasn't used, or didn't have them. If libservice.a was already there, keep in mind that code from a static library is only included if it's used. Maybe "protocol.o" wasn't used by anything, but whatever you added did use it.