Захотел создать shared библиотеку, сама библиотека компилируеться без ощибок. Создал class, под названием "vector2", с использованием template< typename T >, тут тоже без ощибок компилируеться библиотека.
vector2.hpp:
template <typename T>
class vector2
{
public:
vector2();
vector2(T x, T y);
T x = 0, y = 0;
};
vector2.cpp:
template <typename T>
vector2<T>::vector2() {}
template <typename T>
vector2<T>::vector2(T x, T Y)
{
this->x = x;
this->y = y;
}
main.cpp:
#include <AceEngine/AceEngine.hpp>
vector2<float> vec;
int main()
{
}
Команда компиляций файла main.cpp:
g++ main.cpp -o main -lAceEngine
Ощибка компиляций:
/usr/bin/ld: /tmp/ccj5Nupg.o: in function `__static_initialization_and_destruction_0(int, int)':
main.cpp:(.text+0x38): undefined reference to `ACE::vector2<float>::vector2()'
collect2: error: ld returned 1 exit status
MakeFile, для компиляций библиотеки:
CXX = g++
CXX_FLAGS = -std=c++11 -Wall -Wextra -fPIC
LIBS = -lSDL2
-lSDL2_image
-lSDL2_ttf
-lSDL2_mixer
-lGL
SOURCE_FILES = source_files/.cpp
HEADER_FILES = header_files/.hpp
O_FILES = *.o
LIB = libAceEngine.so
LIB_PATH = /usr/lib/x86_64-linux-gnu/
ENGINE_PATH = /usr/include/AceEngine
all:
$(CXX) $(CXX_FLAGS) -c -fPIC $(SOURCE_FILES) $(LIBS)
$(CXX) $(CXX_FLAGS) -shared $(O_FILES) -o $(LIB)
make -f MakeFile clean
install:
mkdir $(ENGINE_PATH)
mv $(LIB) $(LIB_PATH)
cp -r $(HEADER_FILES) $(ENGINE_PATH)
clean:
rm -rf *.o
uninstall:
sudo rm -rf $(LIB_PATH)/$(LIB) $(ENGINE_PATH)
Как исправить эту ощибку?
Заранее благодарен!
.cppфайле? – Oct 24 '20 at 16:26.cppфайле, Я смогу скрыть часть кода от людей ну или что-то типо того... . – RedBull4 Oct 24 '20 at 16:30class vector2<float>;– vp_arth Oct 24 '20 at 16:49