Many Thanks Nathan & Larry, 

Apologies for the late reply, i was not at work. I'll take a look at fixing 
this up now. 

Appreciate your help! 



From: "Larry Gritz" <l...@larrygritz.com> 
To: "oiio-dev" <oiio-dev@lists.openimageio.org> 
Sent: Wednesday, 1 July, 2020 3:27:49 PM 
Subject: Re: [Oiio-dev] Do the tx plugins support Nuke12+? 

Pro tip for apps out there: 

If you are embedding or shipping your own build of a commonly-used library and 
use a custom namespace (yes, please do!) you should either link statically, or 
ALSO make sure the shared library itself also has a custom name. 

Pro tip for library authors: 

Your build system should allow customizing of both the namespace and the 
library name. (For OIIO, those build options are controlled by 
-DOIIO_NAMESPACE=... and -DOIIO_LIBNAME_SUFFIX=...) 





On Jun 30, 2020, at 10:31 PM, Nathan Rusch < [ mailto:nathanru...@gmail.com | 
nathanru...@gmail.com ] > wrote: 



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 < [ mailto:zac.cos...@rsp.com.au | 
zac.cos...@rsp.com.au ] > wrote: 



BQ_BEGIN

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" < [ mailto:l...@larrygritz.com | l...@larrygritz.com ] > 
To: "oiio-dev" < [ mailto:oiio-dev@lists.openimageio.org | 
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 
[ mailto:Oiio-dev@lists.openimageio.org | Oiio-dev@lists.openimageio.org ] 
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org 

BQ_END


-- 
Larry Gritz 
[ mailto:l...@larrygritz.com | l...@larrygritz.com ] 





_______________________________________________ 
Oiio-dev mailing list 
Oiio-dev@lists.openimageio.org 
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org 
_______________________________________________
Oiio-dev mailing list
Oiio-dev@lists.openimageio.org
http://lists.openimageio.org/listinfo.cgi/oiio-dev-openimageio.org

Reply via email to