Связывание исполняемого файла CXX

Я пытаюсь построить проект. Когда я делаю ./build.sh -arch x64, я получаю ошибку компоновки:

Linking CXX shared library /home/buzanova/gmat/application/bin/libGmatBase.so
[72%] Built target GmatBase
Linking CXX executable /home/buzanova/gmat/application/bin/gmatConsole
/home/buzanova/gmat/application/bin/libGmatBase.so.R2013a: undefined reference to DelaL::DelaL(std::string const&, GmatBase*)
etc.....

Мой CMakeFile.txt содержит

if (UNIX)
MESSAGE("-- Using a shared base library")
IF(APPLE) # mac
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -dylib -dynamiclib -two_levelnamespace -undefined dynamic_lookup")

# snow leopard
#SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -arch i386")
endif()
endif (UNIX)
INCLUDE_DIRECTORIES("./include")
INCLUDE_DIRECTORIES("./foundation")
INCLUDE_DIRECTORIES("./hardware")
etc......
SET(BASE_SRCS
asset/AssetException.cpp
asset/BodyFixedPoint.cpp
asset/GroundstationInterface.cpp
etc...
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../../application/bin")

ADD_LIBRARY(${TargetName} SHARED ${BASE_SRCS})

Как я могу это исправить?

-1

Решение

для статических библиотек необходимо добавить несколько флагов компоновщика:

-L<lib_path> -l:<lib_name>

Вот пример (предположим, что dir myLib находится в том же каталоге, что и make-файл):

STATIC_LIBS = -L$(CURDIR)/myLib -l:myLib.a
all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJ)
$(CC) $(LDFLAGS) $(OBJ) $(STATIC_LIBS) -o $@
.c.o:
$(CC) $(CFLAGS)  -o $@ $<

clean:
$(RM) $(EXECUTABLE) $(OBJ)  make.out
0

Другие решения