Я готовлюсь использовать libdc1394 для захвата камеры в Mac OS 10.9 / XCode5 и сталкиваюсь с ошибками Apple Mach-O Linker. Я работаю над тем, что казалось хорошим инструкции для libdc1394 и XCode, и был успешным в поиске libdc1394.dylib, в том числе и попадании в hello world, что должно означать, что все правильно подключено.
Я новичок в разработке XCode, поэтому, если возможно, будьте подробны в своем ответе! Я понимаю, что это может быть связано с таргетингом сборки.
Следующим шагом было создание простого примера (grab_color_image.c), но я получаю массу ошибок компоновщика, начиная с чего-либо в void cleanup_and_exit(dc1394camera_t *camera)
, который я закомментировал:
void cleanup_and_exit(dc1394camera_t *camera)
{
// dc1394_video_set_transmission(camera, DC1394_OFF);
// dc1394_capture_stop(camera);
// dc1394_camera_free(camera);
// exit(1);
}
Например, раскомментирование первой строки выше дает:
* Неопределенные символы для архитектуры x86_64:
«_dc1394_video_set_transmission», на которую ссылается: cleanup_and_exit (__dc1394_camera **) в main.o ld: символ (ы) не найден для архитектуры x86_64 clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова)
Ниже я попытался продвинуться дальше в программе, оставив закомментированные материалы выше …
Программа ниже дает похожую ошибку в d = dc1394_new ();
: Неопределенные символы для архитектуры x86_64:
«_dc1394_new», по ссылке с:
_main in main.o
ld: символы не найдены для архитектуры x86_64
clang: error: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v для просмотра вызова)
#include <iostream>
#include <dc1394/dc1394.h>
#include <stdio.h>
#include <stdint.h>
#include <dc1394/dc1394.h>
#include <stdlib.h>
#include <inttypes.h>
#ifndef _WIN32
#include <unistd.h>
#endif
#define IMAGE_FILE_NAME "image.ppm"
/*-----------------------------------------------------------------------
* Releases the cameras and exits
*-----------------------------------------------------------------------*/
void cleanup_and_exit(dc1394camera_t *camera)
{
// dc1394_video_set_transmission(camera, DC1394_OFF);
// dc1394_capture_stop(camera);
// dc1394_camera_free(camera);
// exit(1);
}
int main(int argc, const char * argv[])
{
FILE* imagefile;
dc1394camera_t *camera;
unsigned int width, height;
dc1394video_frame_t *frame=NULL;
//dc1394featureset_t features;
dc1394_t * d;
dc1394camera_list_t * list;
dc1394error_t err;
d = dc1394_new (); // <-- THIS gives a linker error, the above stuff is fine
// if (!d)
// return 1;
// err=dc1394_camera_enumerate (d, &list);
// DC1394_ERR_RTN(err,"Failed to enumerate cameras");// insert code here...
std::cout << "Hello, World!\n";
return 0;
}
Как я упоминал ранее, я совершенно новичок в разработке XCode и подозреваю, что это может иметь какое-то отношение к «цели сборки», но это не совсем очевидно. Вот снимок некоторой базовой информации (извините, она немного размыта):
Мне нужно было установить флажок для целевого членства для libdc1394.dylib.
Нажатие libdc1394.dylib на левой стороне XCode вызывает это на правой стороне. Мне нужно было добавить целевое членство. Хотя в начальной части инструкции #include сработало, позже этого не произошло, потому что библиотека dylib не была связана с проектом, и поэтому символы не были определены для компоновщика. (или что-то типа того …)