VisionWorks and libovx.a/libnvx.a

I don’t think I fully understand the logical separations between the parts of the VisionWorks package (VisionWorks CUDA API vs OpenVX API vs OpenVX Framework). Here’s what I mean:

I’m writing some test code for VisionWorks that makes use of the stereo image processing features. All of the VisionWorks examples I can find use things from the ovxio namespace, which are defined in the nvxio/include/OVX headers. I can compile and link fine just using the visionworks.pc pkg-config settings (libvisionworks.so, libcuda- libcudart.so as the only linked libraries).

I’m NOT compiling /usr/share/visionworks/sources, and thus am NOT linking in libnvx.a and libovx.a. I’m trying to use and link against what is available from the binary visionworks package itself.

However, when I run I get the following error:

undefined symbol: _ZN5ovxio21checkIfContextIsValidEP11_vx_context

Seems that this is probably defined in libnvx.a or libovx.a.

So my question: Do I have to compile /usr/share/visionworks/sources and link against these libraries to get the OpenVX utilities in my package? If I want to just use VisionWorks itself (whatever that means) and not compile additional sources, am I limited to the API listed in the Help documents as “NVX CUDA API”?

Hi,

There is an API change from version 1.5 to 1.6.
NVXIO was split into NVX and OVX.
And libnvx.a and libovx.a will be generated automatically before building visionworks samples.

Please read more information in VisionWorks release note:
https://developer.nvidia.com/embedded/dlc/visionworks-1-6-release-notes

Here is a good Makefile example for VisionWorks-1.6 for your reference:
[url]https://devtalk.nvidia.com/default/topic/1016273/jetson-tx2/visionworks-linking-problem/post/5179211/#5179211[/url]

Thanks.

OK, I’ve got everything building/linking now. I guess my confusion is that after we finish installing Vision works with JetPack, it’s not really installed yet: we still have to build the /use/share/visionworks/sources directory to get the OpenVX functionality, yes?

Hi,

Libraries is installed but the sample is not copied into home directly from VisionWorks-1.6.
User can copy the sample from the ‘/use/share/visionworks/sources’ if required.

We list this information in our README:

Thanks

I’m going to accept your answer, because yes, the libvisionworks.so library is installed. My comment is that libovx.a and libnvx.a are not generated until the VisionWorks sources are compiled. I’m not yet very familiar with the CUDA vs OpenVX vs VisionWorks boundaries, so I will continue to read up on these.

Also, FYI, I think your README link is broken.

Thank you!

1 Like

Hi everyone,

I am still not getting what libvisionworks present in the default install in /usr/lib does if it do not allow to use visionworks without additionnal builds.
From my guess now,

  • libvisionworks implement some kind of backbone of openvx/nvx required by both ovx/nvx ?
    However from looking at the elf table it seems to declare far more than a simple backbone

  • ovx is the part that respond to the openvx standard

  • nvx is the appendix from nvidia to the standard
    Is that correct ? Could you please fix the documentation on this part, getting information a little more technical than the general concept of what is visionworks doing is particularly laborious and imply a lot of guess from the developper about how things seems to work.

    The very simple things like what are the library doing, installation procedure (if possible not requiring a reinstall of the whole operating system), usage requirement (setting a cmake for it was not straightforward) could not be found.

Thanks you

Hi armand.zampierizn4wa,

This is an old thread, please help to open a new topic if still an issue.

Thanks