2017-01-23 14 views
-1

MacOSs Sierra 10.12.2에 마법의 VLSI 소프트웨어를 구축했습니다. 여기에는 tclmagic.dylib 라이브러리 빌드가 포함됩니다. 매직 Exec에서 테스트 할 때 지금은 얻을 :심볼을 찾을 수 없지만 링크 중에 포함되었습니다.

magic 
dyld: lazy symbol binding failed: Symbol not found: _HashInit 
    Referenced from: /usr/local/lib/magic/tcl/tclmagic.dylib 
    Expected in: flat namespace` 

내가 검색 한 동안 포함 된 유틸리티 라이브러리 내부의 HashInit 기능을 발견 링크 :

gcc -g -I/usr/X11/include -I/Library/Frameworks/Tk.framework/Versions/8.6/Headers -I/Library/Frameworks/Tcl.framework/Versions/8.6/Headers -fno-common -Wimplicit-int -fPIC -I/Library/Frameworks/Tk.framework/Versions/8.6/Headers -I/Library/Frameworks/Tcl.framework/Versions/8.6/Headers -I. -I.. -o tclmagic.dylib -dynamiclib -flat_namespace -undefined suppress -noprebind \ 
    ../cmwind/libcmwind.o ../commands/libcommands.o ../database/libdatabase.o ../dbwind/libdbwind.o ../drc/libdrc.o ../debug/libdebug.o ../extract/libextract.o ../graphics/libgraphics.o ../select/libselect.o ../textio/libtextio.o ../tiles/libtiles.o ../windows/libwindows.o ../wiring/libwiring.o ../resis/libresis.o ../sim/libsim.o ../netmenu/libnetmenu.o ../plow/libplow.o ../utils/libutils.o ../ext2sim/libext2sim.o ../ext2spice/libext2spice.o ../calma/libcalma.o ../cif/libcif.o ../plot/libplot.o ../lef/liblef.o ../extflat/libextflat.o ../garouter/libgarouter.o ../mzrouter/libmzrouter.o ../router/librouter.o  ../irouter/libirouter.o ../grouter/libgrouter.o  ../gcr/libgcr.o ../tcltk/libtcltk.o -lc -lX11 -lGL -lGLU -lm -L/usr/X11/lib -lm 

HashInit 기능은 내부 ../utils/libutils 상주 .영형. 은 또한 두 개의 바이너리 나노 -gU 사용했습니다과 기호가 발견된다 :

nm -gU utils/libutils.o | grep HashInit 
0000000000002880 T _HashInit 
00000000000028c0 T _HashInitClient 

nm -gU magic/tclmagic.dylib| grep HashInit 
000000000011ec70 T _HashInit 
000000000011ecb0 T _HashInitClient 

내가 지금 별도의 연결 명령을 시도하고 심볼 매핑 파일 덤프했습니다

ld -o tclmagic.dylib -dylib -flat_namespace -undefined suppress -noprebind   ../cmwind/libcmwind.o ../commands/libcommands.o ../database/libdatabase.o ../dbwind/libdbwind.o ../drc/libdrc.o ../debug/libdebug.o ../extract/libextract.o ../graphics/libgraphics.o ../select/libselect.o ../textio/libtextio.o ../tiles/libtiles.o ../windows/libwindows.o ../wiring/libwiring.o ../resis/libresis.o ../sim/libsim.o ../netmenu/libnetmenu.o ../plow/libplow.o ../utils/libutils.o ../ext2sim/libext2sim.o ../ext2spice/libext2spice.o ../calma/libcalma.o ../cif/libcif.o ../plot/libplot.o ../lef/liblef.o ../extflat/libextflat.o ../garouter/libgarouter.o  ../mzrouter/libmzrouter.o ../router/librouter.o  ../irouter/libirouter.o ../grouter/libgrouter.o  ../gcr/libgcr.o ../tcltk/libtcltk.o -lc -lX11 -lGL -lGLU -lm -L/usr/X11/lib -lm -macosx_version_min 10.12 -all_load -why_load -map debug_map 
ld: warning: option -noprebind is obsolete and being ignored 

을 다시 말하지만, 나는 기호를 사용할 수있는 참조 :

cat debug_map | grep HashInit 
0x0011F390 0x00000040 [ 18] _HashInit 
0x0011F3D0 0x00000150 [ 18] _HashInitClient 
0x001DADFE 0x00000006 [ 18] _HashInit 
0x001DAE04 0x00000006 [ 18] _HashInitClient 
0x001DF2B8 0x0000000A [ 18] _HashInit 
0x001DF2C2 0x0000000A [ 18] _HashInitClient 
0x0020C1D8 0x00000008 [ 18] _HashInit 
0x0020C1E0 0x00000008 [ 18] _HashInitClient` 

, BTW 내가 비슷한 질문 herehere을 본 적이 있지만 나는 그들의 시나리오는 slightl 수 있습니다 생각 y는 cmake 실수로 인해 다른 하나는 다른 내 사건에 영향을 미치지 않는 DYLD_INSERT_LIBRARIES를 사용하여 해결되었습니다. 사전에

감사합니다, 로널드

답변

0

그것은 (symbol.list 1 개 수출 기호 각 행을 포함)을 연결 명령에 -exported_symbol_list symbol.list을 추가하는 것은 나에게 문제를 통과 얻을 것으로 보인다. 그러나, 나는 여전히 (tclsh에서 명령이 실행 아래) 다음 받고 있어요 :

(magic) 1 % load -lazy ./tclmagic.dylib 
cannot find symbol "Tclmagic_Init": dlsym(0x10061e9f0, Tclmagic_Init): symbol not found 
0

내가 대답은 마법 메이크가 티클 "스텁"라이브러리를 사용하지 않는 것을 믿습니다. 스텁을 사용하도록 netgen을 성공적으로 변환했습니다. 마술에서도 똑같이해야합니다. "-lazy"를 사용하는 것은 실제로 문제를 해결하는 게으른 방법 이었지만 스텁 라이브러리를 사용하는 것이 올바른 방법이었습니다.

일반적으로 defs.mak 파일은 "-ltk8.6"및 "-ltcl8.6"대신 "-ltkstub8.6"및 "-ltclstub8.6"을 사용하여 LIB_SPECS를 정의해야합니다. defs.mak는 defs.mak.in에서 파생되었으므로 "configure"와 함께 사용하는 것이 더 복잡합니다. 하지만 defs.mak에서 LIB_SPECS로 빠르게 변경하고 configure를 실행하지 않고 다시 빌드하면 (아마 "clean clean"을 먼저해야 할 것입니다) 생각합니다.

--- 팀

+0

안녕하세요 Tim! 답장을 보내 주셔서 대단히 감사합니다 ... (그리고 Magic & qflow btw를 유지하기 위해!) ... 어떤 시점에서 나는 스텁 라이브러리가 추가되어야하고 -DUSE_TCL_STUBS 및 -DUSE_TK_STUBS 정의를 추가해야한다는 것을 알았습니다. 그러나 나는 여전히 Tclmagic_Init에 대해 불평하는 dlsym 메시지를 받고 있습니다 ... 이제는 아이디어가 부족합니다 ... 감사합니다, 로널드 – 20Mhz