인사말 전체,CMake 및 GCC를 사용하여 Mac에서 정적 라이브러리를 작성 하시겠습니까?
나는 내 응용 프로그램과 나중에 링크되는 정적 라이브러리가 있습니다. 내 개발 환경은 CMake, GCC (Linux, Mac), MinGW (Windows)입니다.
Linux 및 Windows에서 아무 문제없이 정적 라이브러리를 컴파일 할 수 있습니다. (Mac에서도 내 응용 프로그램에 공유 라이브러리를 구축 할 수 있습니다.)
편집 : 공유 라이브러리로 라이브러리를 컴파일했는데 정상적으로 작동했습니다! 정적 라이브러리 구축하기 위해 다음과 같이 내가 CMakeFile를 구성
: 단계를 연결하는 동안
add_library(centi STATIC ${base_srcs} ${crv_srcs} ${node_srcs} ${trnk_srcs} ${defl_srcs} ${infl_srcs} ${track_srcs} ${callback_srcs} ${extract_srcs})
, 그것은 다음과 같은 오류를 제공하고 어떻게 든 "libcenti.a"를 구축 할 수 있습니다.
Linking C static library
lib/libcenti.a /usr/bin/ranlib: file:
lib/libcenti.a(crv_in_rgn_to_bnry_img.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_initialize_by_circle.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_initialize_flgs.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_nodal_interval_min_and_max.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_remove_all_nodes.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_reset_nodal_forces.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_set_center_coords.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_set_left_ptch_rgn_pixs.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_set_out_rgn_mean_and_var.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_set_para.c.o) has
no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_set_right_ptch_rgn_pixs.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_to_in_rgn_hist.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(crv_to_out_rgn_pixs.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(trnk_initialize_by_circle.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(trnk_initialize_by_image_frame.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(trnk_stk_paint_nodes_and_pixs.c.o)
has no symbols /usr/bin/ranlib: file:
lib/libcenti.a(trnk_stk_to_inner_defl_ordn.c.o)
has no symbols
하지만 내 응용 프로그램과 라이브러리의 위 연결할 때, 그것은 "정의되지 않은 기호를"오류 제공 :
Undefined symbols:
"_setActiveDrawingTrunk", referenced
from:
RzPluginAlgoCnty::initCallBacks()
in RzPluginAlgoCnty.cpp.o
RzPluginAlgoCnty::clearCallBacks()
in RzPluginAlgoCnty.cpp.o
_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_bg_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_bg_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_extract_contour_update_tracking in
libcenti.a(extract_contour_update_tracking.c.o)
_extract_contour_update_tracking in
libcenti.a(extract_contour_update_tracking.c.o)
"_updateCurveUICallBack", referenced
from:
RzPluginAlgoCnty::initCallBacks()
in RzPluginAlgoCnty.cpp.o
RzPluginAlgoCnty::initBulkCallBacks()
in RzPluginAlgoCnty.cpp.o
RzPluginAlgoCnty::clearCallBacks()
in RzPluginAlgoCnty.cpp.o
_bg_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_bg_trnk_trck_ordn in libcenti.a(trnk_trck_ordn.c.o)
_crv_update_1time in libcenti.a(crv_update_ordn.c.o)
_crv_update_1time in libcenti.a(crv_update_ordn.c.o) ld:
symbol(s) not found
모든 팁을? Mac에서 정적 라이브러리를 작성할 때 특별한 매개 변수를 추가해야합니까?
편집 : 라이브러리를 SHARED 라이브러리로 컴파일했는데 정상적으로 작동했습니다.
공유 라이브러리로 컴파일하여이 문제를 해결했습니다. –
* "연결 단계 중 다음 오류가 발생하고"libcenti.a "를 빌드하십시오. 여하튼 .... 기호가 없습니다. * - 오류가 아닙니다. 그들은 [쓸모없는] 경고입니다. OS X에서'art'와'ranlib'이 아닌'libtool'을 사용해야 할 것입니다. 나는 그것을 억제 할 수있는 옵션이 있다고 생각했지만, 지금은 찾을 수 없습니다. 또한 [Silence "목차가 비어 있습니다"경고 (https://stackoverflow.com/q/27602998/608639)를 참조하십시오. – jww