0

I'm building a static library for a small project, and when I compile it with ar, it correctly links.

When I go to include the relevant header file and link the test script to the archive;

LINK = -lpthread -lcryptopp -L./path/to/archive/ -luttu
r: ../inc/uttu.hpp
  g++ -std=c++20 rnet.cpp -o r.out $(LINK)

I get linker errors;

/usr/bin/ld: /tmp/cc7h6RHu.o: in function `main':
rnet.cpp:(.text+0x263): undefined reference to `np::np()'
/usr/bin/ld: rnet.cpp:(.text+0x317): undefined reference to `np::np()'
/usr/bin/ld: ./../exe//libuttu.a(peer.o): in function `Peer::Connect(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
/home/uton/code/Concord/uttu/src/peer.cpp:43: undefined reference to `void np::target<np::_tf>(np::_tf)'
/usr/bin/ld: ./../exe//libuttu.a(relay.o): in function `Relay::Foward()':
/home/uton/code/Concord/uttu/src/relay.cpp:40: undefined reference to `np::np()'
collect2: error: ld returned 1 exit status
make: *** [Makefile:8: r] Error 1

Running ar t libuttu.a returns

linux.o
uttu.o
timeout.o
peer.o
relay.o
sec.o
np.o

My test script includes the main header file, uttu.hpp, which itself refers to the np header file, under the name of protocols.hpp

The path to the archive file is correct, the archive itself contains the correct object file, and the test script refers to the main header file, which includes the correct definitions.

I'm stuck on what could be going wrong.

uton
  • 1
  • 4
  • It's difficult to help with just a word description. Details really matter and words alone are not precise enough. Please provide a complete [mre]. – kaylum Feb 25 '22 at 21:28

1 Answers1

0

After reading this SO question, I realized that I had missed an overridden virtual member.

uton
  • 1
  • 4