У меня проблема с связыванием библиотеки fftw с помощью cmake. Я использую файл findFFTW.cmake, чтобы найти библиотеку. Я знаю, что это успешно находит библиотеку, потому что я устанавливаю флаг REQUIRED как истину для поиска библиотеки, и процесс make проходит через штраф.CMake находит библиотеку fftw, но не может ссылаться
Несмотря на ссылку на мой исполняемый файл, я все еще получаю неопределенные эталонные ошибки. Некоторые связанные должности, решения которых я пробовал.
Undefined reference to "function name from external library"
http://answers.ros.org/question/171326/catkin-linking-order-undefined-reference-to-symbol/
Обновления
Благодаря ComicSansMS, то CMake ниже теперь должен моделировать зависимости правильно.
CMake файл проекта (обновлено 3/7)
cmake_minimum_required(VERSION 2.8.3)
project(gist_extractor)
## Find catkin macros and libraries
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
image_transport
cv_bridge
sensor_msgs
cmake_modules
)
find_package(OpenCV REQUIRED)
find_package(Eigen REQUIRED)
find_package(FFTW REQUIRED)
###########
## Build ##
###########
## Set GIST variables for building library
set(GIST_PATH /home/andy/Development/lear_gist-1.2)
## Specify additional locations of header files
include_directories(include ${catkin_INCLUDE_DIRS} ${GIST_PATH} ${FFTW_INCLUDES})
## Declare a gist library
add_library(gist SHARED ${GIST_PATH}/standalone_image.c ${GIST_PATH}/gist.c) # THIS IS NOT BEING BUILT
target_link_libraries(gist ${FFTW_LIBRARIES})
## Add cmake target dependencies of the library
#MESSAGE(STATUS "GIST_LIBRARY_PATH: " ${GIST_PATH})
## Declare a C++ executable
add_executable(gist_extractor src/gist_extractor.cpp)
target_link_libraries(gist_extractor ${catkin_LIBRARIES} gist)
редактирует 2
Теперь у нас есть ошибки, связывающую если мы используем выше CMake файла. В частности, процесс изготовления не работает, когда я пытаюсь запустить
target_link_libraries(gist_extractor ${catkin_LIBRARIES} gist)
У меня есть пара наблюдений. Во-первых, моя gist-библиотека строится правильно на основе следующих консольных сообщений.
Linking C shared library /home/andy/Projects/ROS/robot_ws/devel/lib/libgist.so
[ 80%] Built target gist
Scanning dependencies of target gist_extractor
[100%] Building CXX object
`gist_extractor/CMakeFiles/gist_extractor.dir/src/gist_extractor.cpp.o
Но мы можем видеть, что есть неопределенные ссылки на ошибки, когда мы пытаемся связать наш исполняемый файл с сутью библиотеки.
Linking CXX executable gist_extractor
: undefined reference to `color_gist_scaletab'
Вот почему я не понимаю, почему это происходит. В gist_extractor.cpp я включил файл заголовка, который включает функцию color_gist_scaletab. В частности, этот «color_gist_scaletab» определен в «gist.h» и реализован в «gist.c». Я бы подумал, что создание моей библиотеки должно дать мне доступ к «color_gist_scaletab». Я разместил соответствующие файлы ниже.
gist.h
#ifndef GIST_H_INCLUDED
#define GIST_H_INCLUDED
#include "standalone_image.h"
/*! Graylevel GIST for various scales. Based on Torralba's Matlab
* implementation. http://people.csail.mit.edu/torralba/code/spatialenvelope/
*
* Descriptor size is w*w*sum(n_orientations[i],i=0..n_scale-1)
*
* @param src Source image
* @param w Number of bins in x and y axis
*/
float *bw_gist_scaletab(image_t *src, int nblocks, int n_scale, const int *n_orientations);
/*! @brief implementation of grayscale GIST descriptor.
* Descriptor size is w*w*(a+b+c)
*
* @param src Source image
* @param w Number of bins in x and y axis
*/
float *bw_gist(image_t *scr, int nblocks, int a, int b, int c);
/*! @brief implementation of color GIST descriptor.
*
* @param src Source image
* @param w Number of bins in x and y axis
*/
float *color_gist(color_image_t *src, int nblocks, int a, int b, int c);
/*! Color GIST for various scales. Based on Torralba's Matlab
* implementation. http://people.csail.mit.edu/torralba/code/spatialenvelope/ */
float *color_gist_scaletab(color_image_t *src, int nblocks, int n_scale, const int *n_orientations);
#endif
gist_extractor.cpp
// color_gist_scaletab is defined in gist.h
// I'm including relevant header file
#include "/home/andy/Development/lear_gist-1.2/gist.h"
//SOME MORE STUFF
// This is where I call the function
float *gist_descriptor = color_gist_scaletab(im, nblocks, n_scale, orientations_per_scale);
Эй. Спасибо за комментарии. Это было бесполезно! –
То, как вы моделировали зависимости, имеет большой смысл. После включения ваших предложений, я понимаю, что моя библиотека «gist» не строится. В результате я все еще получаю неопределенные ошибки символов. У вас есть идеи, почему это может быть так и как я могу это исправить? Именно этот вопрос заставлял меня жестко печатать либера. Я обновил код в своем исходном сообщении, чтобы лучше объяснить это. –
@AndyLee Вы уверены, что 'gist' не строится? Потому что в коде, который вы опубликовали, нет ничего, что могло бы вызвать это. Попробуйте запустить 'make gist' из командной строки. Вы не должны жаловаться. – ComicSansMS