่ชญ่€…ใงใ™ ่ชญ่€…ใ‚’ใ‚„ใ‚ใ‚‹ ่ชญ่€…ใซใชใ‚‹ ่ชญ่€…ใซใชใ‚‹

MacPorts ใฎ GCC ใซใฏใƒใ‚ฐใŒใ‚ใ‚‹๏ผˆๆฐ—ใŒใ™ใ‚‹๏ผ‰

ๆœ€่ฟ‘ใฎ MacPorts ็‰ˆ GCC ใฏใชใ‚“ใ ใ‹ๆ€ชใ—ใๆ„Ÿใ˜ใ‚‹ใ€‚ๆœ€่ฟ‘ใฎใƒใƒผใ‚ธใƒงใƒณใงใฏ /opt/local/lib/libstdc++.6.dylib ใŒไพๅญ˜้–ขไฟ‚ใซ่ฟฝๅŠ ใ•ใ‚Œใ‚‹ใ‚ˆใ†ใซใชใฃใŸใ‚‰ใ—ใ„ใ€‚ใƒใ‚ฑใƒƒใƒˆใ‚’่ฆ‹ใฆใฟใ‚‹ใจใชใ‚“ใ ใ‹ใ”ใŸใ”ใŸใ—ใฆใ„ใ‚‹ใ‚ˆใ†ใช้›ฐๅ›ฒๆฐ—ใงใฏใ‚ใ‚‹ใŒ่‹ฑ่ชžใชใฎใงใ‚ˆใใ‚ใ‹ใ‚‰ใชใ„ใ€‚

Mac OS X 10.6 ใง g++-mp-4.7 -arch x86_64 ใชใ‚“ใฆใ‚„ใ‚‹ใจใ‚ณใƒณใƒ‘ใ‚คใƒซใฏ้€šใ‚‹ใ‚‚ใฎใฎใ€ๅฎŸ่กŒๆ™‚ใซ /usr/lib/libSystem.B.dylib ใŒ /usr/lib/libstdc++.6.dylib ใ‚’ๅ‘ผใณๅ‡บใ™ใŸใ‚ใ‚ฏใƒฉใƒƒใ‚ทใƒฅใ—ใฆใ—ใพใ†ใ€‚ใ“ใ‚Œใ‚’ๅ›ž้ฟใ™ใ‚‹ใŸใ‚ใซ่‰ฒใ€…่ฉฆ่กŒ้Œฏ่ชคใ—ใฆใ„ใ‚‹ใ‚“ใ ใ‘ใฉใชใ‹ใชใ‹ใ†ใพใใ„ใ‹ใชใ„ใ€‚

ไธ€็•ช็ฐกๅ˜ใชใฎใฏ DYLD_LIBRARY_PATH=/opt/local/lib/gcc47 ใจๆŒ‡ๅฎšใ™ใ‚‹ใ“ใจใ€‚ใ“ใ†ใ™ใ‚Œใฐใจใ‚Šใ‚ใˆใš /usr/lib/libstdc++.6.dylib ใ‚’่ชญใพใชใใชใ‚‹ใ€‚ใŸใ ใ—ๅฎŸ่กŒใƒ•ใ‚กใ‚คใƒซใ‹ใ‚‰็›ดๆŽฅ่ตทๅ‹•ใŒใงใใชใ„ใฎใงไบ‹ๅ‰ใซ DYLD_LIBRARY_PATH ใ‚’่จญๅฎšใ—ใชใใฆใฏใ„ใ‘ใชใ„ใ€‚

$ DYLD_LIBRARY_PATH=/opt/local/lib/gcc47 ./application

ๆฌกใซ็ฐกๅ˜ใชใฎใฏใ‚ณใƒณใƒ‘ใ‚คใƒซๆ™‚ใซ /usr/lib/libstdc++.6.dylib ใ‚’ๆœ€ๅ„ชๅ…ˆใงใƒชใƒณใ‚ฏใ—ใฆใ—ใพใ†ใ“ใจใ€‚ใ“ใ‚Œใฏ LDFLAGS=/usr/lib/libstdc++.6.dylib ใฎใ‚ˆใ†ใซใƒ•ใƒซใƒ‘ใ‚นใง็›ดๆŽฅๆŒ‡ๅฎšใ™ใ‚Œใฐใ„ใ„๏ผˆ-L ใจใ‹ lstdc++ ใจใ‹ใฏ่ฆใ‚‰ใชใ„๏ผ‰ใ€‚ใ“ใ†ใ™ใ‚Œใฐ /opt/local/lib/libstdc++.6.dylib ใŒๅพŒใ‹ใ‚‰่ชญใฟ่พผใพใ‚ŒใฆไธŠๆ›ธใใ—ใฆใใ‚Œใ‚‹ใ€‚otool ใง่ฆ‹ใŸๆ™‚ใซไธ€็•ชไธŠใซๅ‡บใฆใ‚‹ใฎใŒใชใ‚“ใ ใ‹ๅพฎๅฆ™ใ ใ‘ใฉใ€‚

$ cmake -DCMAKE_EXE_LINKER_FLAGS="/usr/lib/libstdc++.6.dylib" ..

ๆœ€ๅพŒใซ DYLD_INSERT_LIBRARIES ใ‚’ไฝฟใ†ๆ–นๆณ•ใ€‚ใ“ใ‚Œใฏ LD_PRELOAD ใฎ Mac ็‰ˆใ‹ใช๏ผŸๅฎŸ่กŒใƒ•ใ‚กใ‚คใƒซใ‚’่ตทๅ‹•ใ™ใ‚‹ใจใใซๆœ€ๅˆใซ่ชญใฟ่พผใ‚€ใƒฉใ‚คใƒ–ใƒฉใƒชใ‚’ๆŒ‡ๅฎšใงใใ‚‹ใ€‚ใŸใ ใ—ใ€ๆ™ฎ้€šใซใ‚ณใƒณใƒ‘ใ‚คใƒซใ—ใŸๅ ดๅˆใฏ DYLD_FORCE_FLAT_NAMESPACE=1 ใ‚‚ไธ€็ท’ใซๆŒ‡ๅฎšใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ใ€‚ใ“ใ‚ŒใŒใกใ‚‡ใฃใจ้ขๅ€’ใ ใ‘ใฉใ€ใ‚ณใƒณใƒ‘ใ‚คใƒฉใƒ•ใƒฉใ‚ฐใซ -flat_namespace ใ‚’ใคใ‘ใฆใ‚ณใƒณใƒ‘ใ‚คใƒซใ—ใฆใ‚ใ’ใ‚‹ใจ่จญๅฎšใ—ใชใใฆใ‚‚ใ„ใ„ใ€‚DYLD_LIBRARY_PATH ใ ใจใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใพใ‚‹ใ”ใจใซใชใฃใฆใ—ใพใ†ใ‘ใฉใ“ใ‚Œใฏๅ˜ไฝ“ใงๆŒ‡ๅฎšใงใใ‚‹ใฎใงไฝฟใ„ๆ˜“ใ„ใ€‚

ใƒ“ใƒซใƒ‰ๆ™‚

$ cmake -DCMAKE_EXE_LINKER_FLAGS="-Wl,-flat_namespace" ..

่ตทๅ‹•ๆ™‚

$ DYLD_INSERT_LIBRARIES=/usr/lib/libstdc++.6.dylib ./application

่‡ชๅˆ†ใŒไฝฟใฃใฆใ„ใ‚‹ใฎใŒ MacBook Air3,1 Snow Leopard ใชใฎใง CPU ใฏ x86_64 ใชใฎใซ uname ใจใ‹ใŒ i386 ใ ใฃใŸใ‚Šๅ›ฐๆƒ‘ใ™ใ‚‹ใ€‚arch ใจใ‹ใฎ็ตๆžœใ‚’ๆฐธ็ถš็š„ใซๆ›ธใๆ›ใˆใ‚‹ๆ–นๆณ•ใฃใฆใชใ„ใ‚“ใ ใ‚ใ†ใ‹๏ผŸ

่‡ชๅˆ†ใงใƒ“ใƒซใƒ‰ใ—ใŸ LLVM/CLANG-3.3 ใฏ /usr/lib/libstdc++.6.dylib ใ‚’ไฝฟใฃใฆใ„ใ‚‹ใฎใงใ“ใฎไฝœๆฅญใฏๅฟ…่ฆใชใ„ใ‘ใฉใ€ใพใ ๅฏพๅฟœใ—ใฆใ„ใชใ„ใ‚‚ใฎใŒๅคšใ„ใฎใง GCC ใ‚’ไฝฟใ†ใ—ใ‹ใชใ„ใ€‚ๆ™‚้–“ใŒใ‚ใ‚‹ใจใใซ่‡ชๅˆ†ใงใƒ“ใƒซใƒ‰ใ—ใ‚ˆใ†ใ€‚ไพๅญ˜้–ขไฟ‚ๅคšใใฆ้ขๅ€’ใ ใ‘ใฉใ€‚


man ld ใ‚’่‰ฒใ€…่ชญใ‚“ใง่ฆ‹ใฆใ€ใ‚ชใƒ—ใ‚ทใƒงใƒณใซ -weak-library ใชใ‚“ใฆใฎใŒใ‚ใฃใŸใฎใง่จญๅฎšใ—ใฆใฟใŸใ‚‰ใƒฉใ‚คใƒ–ใƒฉใƒชใ‚’ใƒ•ใƒซใƒ‘ใ‚นใงๆŒ‡ๅฎšใ—ใŸใจใใจๅŒใ˜ใ‚ˆใ†ใซไธ€็•ชๆœ€ๅˆใซ่ชญใฟ่พผใ‚€ใ‚ˆใ†ใซใƒชใƒณใ‚ฏใ—ใฆใใ‚Œใ‚‹ใ‚ˆใ†ใซใชใฃใŸใ€‚

๏ผˆๆœ€่ฟ‘ tcsh ใซใ—ใพใ—ใŸ๏ผ‰

setenv CC       "/opt/local/bin/gcc-mp-4.7"
setenv CXX      "/opt/local/bin/g++-mp-4.7"
setenv LDFLAGS  "-flat_namespace -pie -Wl,-lazy_library,/usr/lib/libstdc++.6.dylib"

/usr/lib/libstdc++.6.dylib ใฏๅพŒใ‹ใ‚‰ /opt/local/lib/libstdc++.6.dylib ใงไธŠๆ›ธใใ•ใ‚Œใ‚‹ใ€‚

/usr/local/src/rawtherapee/RELWITHDEBINFO/rawtherapee:
	/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)

	๏ผˆไธญ็•ฅ๏ผ‰

	/opt/local/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.17.0)
	/opt/local/lib/gcc47/libgomp.1.dylib (compatibility version 2.0.0, current version 2.0.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
	/opt/local/lib/gcc47/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)

otool -l -v ใง็ขบ่ชใ—ใฆใฟใ‚‹ใจ -weak-library ใงๆŒ‡ๅฎšใ™ใ‚‹ใจ LC_LOAD_DYLIB ใงใฏใชใ LC_LOAD_WEAK_DYLIB ใจใ—ใฆ่จญๅฎšใ•ใ‚Œใฆใ„ใ‚‹ใ€‚

Load command 11
          cmd LC_LOAD_WEAK_DYLIB
      cmdsize 56
         name /usr/lib/libstdc++.6.dylib (offset 24)
   time stamp 2 Thu Jan  1 09:00:02 1970
      current version 7.9.0
compatibility version 7.0.0

๏ผˆไธญ็•ฅ๏ผ‰

Load command 54
          cmd LC_LOAD_DYLIB
      cmdsize 64
         name /opt/local/lib/libstdc++.6.dylib (offset 24)
   time stamp 2 Thu Jan  1 09:00:02 1970
      current version 7.17.0
compatibility version 7.0.0

ใ‚ฆใ‚ฃใƒผใ‚ฏใƒชใƒณใ‚ฏใซใคใ„ใฆใพใ ๅ‹‰ๅผทไธ่ถณใงใฉใฎใ‚ˆใ†ใช็ตๆžœใซใชใ‚‹ใ‹ใฏใ‚ใ‹ใ‚‰ใชใ„ใ‘ใฉใจใ‚Šใ‚ใˆใšไปŠๅ›žใฏใ“ใ“ใพใงใ€‚