OK, I think the OpenColorIO symbol lookup error was the missing link here
(pun very much intended). I should mention that we don’t currently build
OIIO against OCIO because static linkage won’t work without backporting
some OCIO build changes from the 2.x development branch, so that would
explain why I don’t encounter anything like this issue.

Nuke ships with its own OCIO library that uses a custom outer symbol
namespace of FnOpenColorIO (which is what you’re seeing in your loader
error), but the library name is not customized (it’s just libOpenColorIO.so).
Because of this, the runtime OCIO requirement for your compiled
libOpenImageIO.so is going to resolve to the libOpenColorIO.so that ships
with Nuke.

The smoking gun is that the OCIO library they ship in 12.x uses
boost::shared_ptr, while Nuke 11.3 and prior used std::tr1::shared_ptr (and
I’m guessing the OCIO build you’re using for OIIO does as well). This would
explain where the symbol mismatch is coming from, and why the plugins work
in 11.3. Thus, you’ll likely need to produce an alternate OCIO build (or at
least configure and install a new set of headers and find a way to link
against the libOpenColorIO.so that ships with Nuke) in order to build
against 12.x.

Hope this helps.

-Nathan

On Tue, Jun 30, 2020 at 8:04 PM Zac Coster <zac.cos...@rsp.com.au> wrote:

Hi Larry,
>
> Many Thanks for taking a look!
>
> When i drop a Read Node down in Nuke. I get a red banner appear with the
> below error after i try to read a .tx file
>
> Read1: ${tx_file_name}.tx: Read error:
> /home/zacc/dev/junk/build_test/oiio/oiio-rb-2.2.3/oiio-RB-2.2.3/install/lib64/txReader.so:plugin
> did not define txReader
>
> (*Not sure if this part is relevant)
> If i then try to import txReader via the python scriptEditor, it returns.
>
> import txReader
> # Result: Traceback (most recent call last):
>   File "<string>", line 1, in <module>
> ImportError: dynamic module does not define init function (inittxReader)
>
> Interestingly if i try the same import, however without first creating a
> read node, i actually get an OCIO symbol error.
>
> import txReader
> # Result: Traceback (most recent call last):
>   File "<string>", line 1, in <module>
> ImportError:
> /home/zacc/dev/junk/build_test/oiio/oiio-rb-2.2.3/oiio-RB-2.2.3/install/lib64/libOpenImageIO.so.2.2.3:
> undefined symbol:
> _ZNK13FnOpenColorIO2v16Config12getProcessorERKNSt3tr110shared_ptrIKNS0_7ContextEEERKNS3_IKNS0_9TransformEEENS0_18TransformDirectionE
>
> Using C++Filt results in
> FnOpenColorIO::v1::Config::getProcessor(std::tr1::shared_ptr<FnOpenColorIO::v1::Context
> const> const&, std::tr1::shared_ptr<FnOpenColorIO::v1::Transform const>
> const&, FnOpenColorIO::v1::TransformDirection) const
>
> (Strace results from forced plugin reload)
>
> I also see the below strace
> if i try to forcefully load all of Nuke's plugins
> import nuke
> nuke.nodeTypes(True)
>
> open("/home/zacc/dev/junk/build_test/oiio/oiio-rb-2.2.3/oiio-RB-2.2.3/install/lib64/txWriter.so",
> O_RDONLY|O_CLOEXEC) = 118
> read(118,
> "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220\242\0\0\0\0\0\0"...,
> 832) = 832
> fstat(118, {st_mode=S_IFREG|0755, st_size=186872, ...}) = 0
> mmap(NULL, 2251928, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 118,
> 0) = 0x7f88e758a000
> mprotect(0x7f88e75af000, 2093056, PROT_NONE) = 0
> mmap(0x7f88e77ae000, 8192, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 118, 0x24000) = 0x7f88e77ae000
> close(118)                              = 0
> mprotect(0x7f88e77ae000, 4096, PROT_READ) = 0
> openat(AT_FDCWD, "/sys/devices/system/cpu",
> O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 118
> brk(NULL)                               = 0xcec3000
> brk(0xcee7000)                          = 0xcee7000
> getdents(118, /* 42 entries */, 32768)  = 1248
> getdents(118, /* 0 entries */, 32768)   = 0
> close(118)                              = 0
> sched_getaffinity(29347, 8, [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
> 18 19 20 21 22 23]) = 8
> futex(0x7f8a2c3f8678, FUTEX_WAKE_PRIVATE, 2147483647) = 0
> futex(0x7f8a2c3f8678, FUTEX_WAKE_PRIVATE, 2147483647) = 0
> --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0xad8f6} ---
> rt_sigaction(SIGSEGV, NULL, {0x451580, [ILL ABRT BUS FPE SEGV],
> SA_RESTORER|SA_STACK|SA_SIGINFO, 0x7f8b4d7365f0}, 8) = 0
> prctl(PR_SET_DUMPABLE, 1)               = 0
> gettid()                                = 29347
> socketpair(AF_LOCAL, SOCK_STREAM, 0, [118, 119]) = 0
> sendmsg(11, {msg_name(0)=NULL,
> msg_iov(1)=[{"\v\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\366\330\n\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
> 1584}], msg_controllen=24, [{cmsg_len=20, cmsg_level=SOL_SOCKET,
> cmsg_type=SCM_RIGHTS, [119]}], msg_flags=0}, 0) = 1584
> close(119)                              = 0
> read(118, "B", 1)                       = 1
> close(118)                              = 0
> rt_sigaction(SIGSEGV, {SIG_DFL, [SEGV], SA_RESTORER|SA_RESTART,
> 0x7f8b4b6d03b0}, {0x451580, [ILL ABRT BUS FPE SEGV],
> SA_RESTORER|SA_STACK|SA_SIGINFO, 0x7f8b4d7365f0}, 8) = 0
> gettid()                                = 29347
> tgkill(29347, 29347, SIGSEGV)           = 0
> rt_sigreturn({mask=[]})                 = 0
> --- SIGSEGV {si_signo=SIGSEGV, si_code=SI_TKILL, si_pid=29347,
> si_uid=50242} ---
> +++ killed by SIGSEGV +++
> Segmentation fault
>
> Apologies, i wish i knew more. This is what i have found so far.
>
>
>
> ------------------------------
> *From: *"Larry Gritz" <l...@larrygritz.com>
> *To: *"oiio-dev" <oiio-dev@lists.openimageio.org>
> *Sent: *Wednesday, 1 July, 2020 11:51:02 AM
> *Subject: *Re: [Oiio-dev] Do the tx plugins support Nuke12+?
>
> Zac, what error message do you get, exactly?
>
_______________________________________________
Oiio-dev mailing list
Oiio-dev@lists.openimageio.org
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

Reply via email to