static library linking issues


Piotr Stanczyk <piotr.s...@...>
 

Hi All,


So far I've been using the .so's to link against. However, I've run
into an issue with building a binary that links against the static
libs with a sleuth of errors (see below).
I don't think I did anything unusual in the building of this. I'll
start digging into what could be causing this, but if anyone has any
pointers that would be most welcome.

Cheers

Piotr




/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `OpenColorIO::v1::Config::serialize(std::basic_ostrea
m<char, std::char_traits<char> >&) const':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/src/core/Config.cpp:1591:
undefined reference to `YAML::Emitter::Emi
tter()'
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `operator<<':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
undefined reference t
o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `operator<<':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/src/core/Config.cpp:1594:
undefined reference to `YAML::Emitter::Set
LocalValue(YAML::EMITTER_MANIP)'
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/src/core/Config.cpp:1594:
undefined reference to `YAML::Emitter::Set
LocalValue(YAML::EMITTER_MANIP)'
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `operator<<':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
undefined reference t
o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `WriteIntegralType<int>':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:104:
undefined reference t
o `YAML::Emitter::good() const'
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:108:
undefined reference t
o `YAML::Emitter::PreWriteIntegralType(std::basic_stringstream<char,
std::char_traits<char>, std::allocator<char> >&)'
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:110:
undefined reference t
o `YAML::Emitter::PostWriteIntegralType(std::basic_stringstream<char,
std::char_traits<char>, std::allocator<char> > const&)'
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `operator<<':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
undefined reference t
o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/ima
....


Jeremy Selan <jeremy...@...>
 

Ugh!

Sorry to hear you've having trouble with static linking.

Can you post the shell command you're using to build OCIO with?

(At SPI we happen to only use OCIO in a dynamically linked context so we havent run into this error yet).

In the latest OCIO release (1.0.7) we bumped the internal yaml-cpp dependency to 0.3.0. I presume you're building 1.0.7?

A few ideas to test:
- Can you confirm that you're using a clean build?  It's possible that if you have old .o files lying around-  built against a prior OCIO - it could cause weirdness.

- Is it possible that another part of your codebase is statically linking against a different OCIO version? (If you have another part of the code statically links to 0.2.X yaml-cpp, I could imagine a yaml-cpp symbol clash)

-- Jeremy


On Tue, May 1, 2012 at 11:35 AM, Piotr Stanczyk <piotr.s...@...> wrote:
Hi All,


So far I've been using the .so's to link against. However, I've run
into an issue with building a binary that links against the static
libs with a sleuth of errors (see below).
I don't think I did anything unusual in the building of this. I'll
start digging into what could be causing this, but if anyone has any
pointers that would be most welcome.

Cheers

Piotr




/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `OpenColorIO::v1::Config::serialize(std::basic_ostrea
m<char, std::char_traits<char> >&) const':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/src/core/Config.cpp:1591:
undefined reference to `YAML::Emitter::Emi
tter()'
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `operator<<':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
undefined reference t
o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `operator<<':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/src/core/Config.cpp:1594:
undefined reference to `YAML::Emitter::Set
LocalValue(YAML::EMITTER_MANIP)'
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/src/core/Config.cpp:1594:
undefined reference to `YAML::Emitter::Set
LocalValue(YAML::EMITTER_MANIP)'
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `operator<<':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
undefined reference t
o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `WriteIntegralType<int>':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:104:
undefined reference t
o `YAML::Emitter::good() const'
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:108:
undefined reference t
o `YAML::Emitter::PreWriteIntegralType(std::basic_stringstream<char,
std::char_traits<char>, std::allocator<char> >&)'
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:110:
undefined reference t
o `YAML::Emitter::PostWriteIntegralType(std::basic_stringstream<char,
std::char_traits<char>, std::allocator<char> > const&)'
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `operator<<':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
undefined reference t
o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/ima
....


Piotr Stanczyk <piotr.s...@...>
 

Hi Jeremy,

Sorry for the delay in getting this info back to you. This is what our
build people say:


We're actually building verison 1.0.6. This was a clean build, and
we're not using ocio elsewhere in our codebase. The ocio build was
invoked via:

cmake -D CMAKE_INSTALL_PREFIX=../dist -D CMAKE_SKIP_RPATH=YES -D
PYTHON=/usr/bin/python2.6 ../

Could it be that the symbols from the the YAML and tinxml libs are
hidden in the ocio build? Is there a way to disable that and make
them all publicly available? Taking the first undefined reference,
for example:

objdump -tC libOpenColorIO.so.1.0.6 | grep "YAML::Emitter::Emitter"
00000000000cfb00 l F .text 000000000000006c .hidden
YAML::Emitter::Emitter()
00000000000cfb70 l F .text 000000000000006c .hidden
YAML::Emitter::Emitter()


And in the ocio code it's definitely referenced ( src/core/Config.cpp ):


void Config::serialize(std::ostream& os) const
{
try
{
YAML::Emitter out;




On Tue, May 1, 2012 at 4:24 PM, Jeremy Selan <jeremy...@...> wrote:
Ugh!

Sorry to hear you've having trouble with static linking.

Can you post the shell command you're using to build OCIO with?

(At SPI we happen to only use OCIO in a dynamically linked context so we
havent run into this error yet).

In the latest OCIO release (1.0.7) we bumped the internal yaml-cpp
dependency to 0.3.0. I presume you're building 1.0.7?

A few ideas to test:
- Can you confirm that you're using a clean build?  It's possible that if
you have old .o files lying around-  built against a prior OCIO - it could
cause weirdness.

- Is it possible that another part of your codebase is statically linking
against a different OCIO version? (If you have another part of the code
statically links to 0.2.X yaml-cpp, I could imagine a yaml-cpp symbol clash)

-- Jeremy


On Tue, May 1, 2012 at 11:35 AM, Piotr Stanczyk <piotr.s...@...>
wrote:

Hi All,


So far I've been using the .so's to link against. However, I've run
into an issue with building a binary that links against the static
libs with a sleuth of errors (see below).
I don't think I did anything unusual in the building of this. I'll
start digging into what could be causing this, but if anyone has any
pointers that would be most welcome.

Cheers

Piotr





/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `OpenColorIO::v1::Config::serialize(std::basic_ostrea
m<char, std::char_traits<char> >&) const':

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/src/core/Config.cpp:1591:
undefined reference to `YAML::Emitter::Emi
tter()'

/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `operator<<':

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
undefined reference t
o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'

/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `operator<<':

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/src/core/Config.cpp:1594:
undefined reference to `YAML::Emitter::Set
LocalValue(YAML::EMITTER_MANIP)'

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/src/core/Config.cpp:1594:
undefined reference to `YAML::Emitter::Set
LocalValue(YAML::EMITTER_MANIP)'

/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `operator<<':

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
undefined reference t
o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'

/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `WriteIntegralType<int>':

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:104:
undefined reference t
o `YAML::Emitter::good() const'

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:108:
undefined reference t
o `YAML::Emitter::PreWriteIntegralType(std::basic_stringstream<char,
std::char_traits<char>, std::allocator<char> >&)'

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:110:
undefined reference t
o `YAML::Emitter::PostWriteIntegralType(std::basic_stringstream<char,
std::char_traits<char>, std::allocator<char> > const&)'

/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorIO.a(Config.cpp.o):
In function `operator<<':

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-OpenColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
undefined reference t
o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/ima
....


Piotr <piotr.s...@...>
 

Just checking in to see if anyone has some magic voodoo for this -
thanks

Piotr

On May 7, 4:51 pm, Piotr Stanczyk <piotr.s...@...> wrote:
Hi Jeremy,

Sorry for the delay in getting this info back to you. This is what our
build people say:

We're actually building verison 1.0.6.  This was a clean build, and
we're not using ocio elsewhere in our codebase.  The ocio build was
invoked via:

cmake -D CMAKE_INSTALL_PREFIX=../dist -D CMAKE_SKIP_RPATH=YES -D
PYTHON=/usr/bin/python2.6 ../

Could it be that the symbols from the the YAML and tinxml libs are
hidden in the ocio build?  Is there a way to disable that and make
them all publicly available?  Taking the first undefined reference,
for example:

objdump -tC libOpenColorIO.so.1.0.6 | grep "YAML::Emitter::Emitter"
00000000000cfb00 l     F .text  000000000000006c              .hidden
YAML::Emitter::Emitter()
00000000000cfb70 l     F .text  000000000000006c              .hidden
YAML::Emitter::Emitter()

And in the ocio code it's definitely referenced ( src/core/Config.cpp ):

void Config::serialize(std::ostream& os) const
{
    try
    {
        YAML::Emitter out;







On Tue, May 1, 2012 at 4:24 PM, Jeremy Selan <jeremy...@...> wrote:
Ugh!
Sorry to hear you've having trouble with static linking.
Can you post the shell command you're using to build OCIO with?
(At SPI we happen to only use OCIO in a dynamically linked context so we
havent run into this error yet).
In the latest OCIO release (1.0.7) we bumped the internal yaml-cpp
dependency to 0.3.0. I presume you're building 1.0.7?
A few ideas to test:
- Can you confirm that you're using a clean build?  It's possible that if
you have old .o files lying around-  built against a prior OCIO - it could
cause weirdness.
- Is it possible that another part of your codebase is statically linking
against a different OCIO version? (If you have another part of the code
statically links to 0.2.X yaml-cpp, I could imagine a yaml-cpp symbol clash)
-- Jeremy
On Tue, May 1, 2012 at 11:35 AM, Piotr Stanczyk <piotr.s...@...>
wrote:
Hi All,
So far I've been using the .so's to link against. However, I've run
into an issue with building a binary that links against the static
libs with a sleuth of errors (see below).
I don't think I did anything unusual in the building of this. I'll
start digging into what could be causing this, but if anyone has any
pointers that would be most welcome.
Cheers
Piotr
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
In function `OpenColorIO::v1::Config::serialize(std::basic_ostrea
m<char, std::char_traits<char> >&) const':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/src/core/Config.cpp:1591:
undefined reference to `YAML::Emitter::Emi
tter()'
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
In function `operator<<':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
undefined reference t
o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
In function `operator<<':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/src/core/Config.cpp:1594:
undefined reference to `YAML::Emitter::Set
LocalValue(YAML::EMITTER_MANIP)'
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/src/core/Config.cpp:1594:
undefined reference to `YAML::Emitter::Set
LocalValue(YAML::EMITTER_MANIP)'
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
In function `operator<<':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
undefined reference t
o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
In function `WriteIntegralType<int>':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:104:
undefined reference t
o `YAML::Emitter::good() const'
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:108:
undefined reference t
o `YAML::Emitter::PreWriteIntegralType(std::basic_stringstream<char,
std::char_traits<char>, std::allocator<char> >&)'
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:110:
undefined reference t
o `YAML::Emitter::PostWriteIntegralType(std::basic_stringstream<char,
std::char_traits<char>, std::allocator<char> > const&)'
/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
In function `operator<<':
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
undefined reference t
o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/ima
....


Jeremy Selan <jeremy...@...>
 

Sorry, i'll try to look into this.

Is anyone out there successfully statically building against OCIO?

-- Jeremy


On Fri, May 11, 2012 at 10:25 AM, Piotr <piotr.s...@...> wrote:
Just checking in to see if anyone has some magic voodoo for this -
thanks

Piotr


On May 7, 4:51 pm, Piotr Stanczyk <piotr.s...@...> wrote:
> Hi Jeremy,
>
> Sorry for the delay in getting this info back to you. This is what our
> build people say:
>
> We're actually building verison 1.0.6.  This was a clean build, and
> we're not using ocio elsewhere in our codebase.  The ocio build was
> invoked via:
>
> cmake -D CMAKE_INSTALL_PREFIX=../dist -D CMAKE_SKIP_RPATH=YES -D
> PYTHON=/usr/bin/python2.6 ../
>
> Could it be that the symbols from the the YAML and tinxml libs are
> hidden in the ocio build?  Is there a way to disable that and make
> them all publicly available?  Taking the first undefined reference,
> for example:
>
> > objdump -tC libOpenColorIO.so.1.0.6 | grep "YAML::Emitter::Emitter"
>
> 00000000000cfb00 l     F .text  000000000000006c              .hidden
> YAML::Emitter::Emitter()
> 00000000000cfb70 l     F .text  000000000000006c              .hidden
> YAML::Emitter::Emitter()
>
> And in the ocio code it's definitely referenced ( src/core/Config.cpp ):
>
> void Config::serialize(std::ostream& os) const
> {
>     try
>     {
>         YAML::Emitter out;
>
>
>
>
>
>
>
> On Tue, May 1, 2012 at 4:24 PM, Jeremy Selan <jeremy...@...> wrote:
> > Ugh!
>
> > Sorry to hear you've having trouble with static linking.
>
> > Can you post the shell command you're using to build OCIO with?
>
> > (At SPI we happen to only use OCIO in a dynamically linked context so we
> > havent run into this error yet).
>
> > In the latest OCIO release (1.0.7) we bumped the internal yaml-cpp
> > dependency to 0.3.0. I presume you're building 1.0.7?
>
> > A few ideas to test:
> > - Can you confirm that you're using a clean build?  It's possible that if
> > you have old .o files lying around-  built against a prior OCIO - it could
> > cause weirdness.
>
> > - Is it possible that another part of your codebase is statically linking
> > against a different OCIO version? (If you have another part of the code
> > statically links to 0.2.X yaml-cpp, I could imagine a yaml-cpp symbol clash)
>
> > -- Jeremy
>
> > On Tue, May 1, 2012 at 11:35 AM, Piotr Stanczyk <piotr.s...@...>
> > wrote:
>
> >> Hi All,
>
> >> So far I've been using the .so's to link against. However, I've run
> >> into an issue with building a binary that links against the static
> >> libs with a sleuth of errors (see below).
> >> I don't think I did anything unusual in the building of this. I'll
> >> start digging into what could be causing this, but if anyone has any
> >> pointers that would be most welcome.
>
> >> Cheers
>
> >> Piotr
>
> >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
> >> In function `OpenColorIO::v1::Config::serialize(std::basic_ostrea
> >> m<char, std::char_traits<char> >&) const':
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/src/core/Config.cpp:1591:
> >> undefined reference to `YAML::Emitter::Emi
> >> tter()'
>
> >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
> >> In function `operator<<':
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
> >> undefined reference t
> >> o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
>
> >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
> >> In function `operator<<':
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/src/core/Config.cpp:1594:
> >> undefined reference to `YAML::Emitter::Set
> >> LocalValue(YAML::EMITTER_MANIP)'
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/src/core/Config.cpp:1594:
> >> undefined reference to `YAML::Emitter::Set
> >> LocalValue(YAML::EMITTER_MANIP)'
>
> >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
> >> In function `operator<<':
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
> >> undefined reference t
> >> o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
>
> >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
> >> In function `WriteIntegralType<int>':
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:104:
> >> undefined reference t
> >> o `YAML::Emitter::good() const'
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:108:
> >> undefined reference t
> >> o `YAML::Emitter::PreWriteIntegralType(std::basic_stringstream<char,
> >> std::char_traits<char>, std::allocator<char> >&)'
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:110:
> >> undefined reference t
> >> o `YAML::Emitter::PostWriteIntegralType(std::basic_stringstream<char,
> >> std::char_traits<char>, std::allocator<char> > const&)'
>
> >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
> >> In function `operator<<':
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
> >> undefined reference t
> >> o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/ima
> >> ....


Jeremy Selan <jeremy...@...>
 

Ok, so I'm able to fully reproduce your error when using static linking with a simple test case.
g++ main.cpp -Ibuild/dist/include -ostatictest build/dist/lib/libOpenColorIO.a
I created a main.cpp, where all it does is print the name of linear.
https://gist.github.com/2663280

If I manually add the .a for yaml and tinyxml everything works!
g++ main.cpp -Ibuild/dist/include -ostatictest build/dist/lib/libOpenColorIO.a build/ext/dist/lib/libyaml-cpp.a build/ext/dist/lib/libtinyxml.a
So as you noted, the static symbols from these two dependencies are not making into ocio.  I'm not much of a cmake expert, but it doesnt seem like this would be too hard to patch up.

-- Jeremy


On Fri, May 11, 2012 at 1:08 PM, Jeremy Selan <jeremy...@...> wrote:
Sorry, i'll try to look into this.

Is anyone out there successfully statically building against OCIO?

-- Jeremy


On Fri, May 11, 2012 at 10:25 AM, Piotr <piotr.s...@...> wrote:
Just checking in to see if anyone has some magic voodoo for this -
thanks

Piotr


On May 7, 4:51 pm, Piotr Stanczyk <piotr.s...@...> wrote:
> Hi Jeremy,
>
> Sorry for the delay in getting this info back to you. This is what our
> build people say:
>
> We're actually building verison 1.0.6.  This was a clean build, and
> we're not using ocio elsewhere in our codebase.  The ocio build was
> invoked via:
>
> cmake -D CMAKE_INSTALL_PREFIX=../dist -D CMAKE_SKIP_RPATH=YES -D
> PYTHON=/usr/bin/python2.6 ../
>
> Could it be that the symbols from the the YAML and tinxml libs are
> hidden in the ocio build?  Is there a way to disable that and make
> them all publicly available?  Taking the first undefined reference,
> for example:
>
> > objdump -tC libOpenColorIO.so.1.0.6 | grep "YAML::Emitter::Emitter"
>
> 00000000000cfb00 l     F .text  000000000000006c              .hidden
> YAML::Emitter::Emitter()
> 00000000000cfb70 l     F .text  000000000000006c              .hidden
> YAML::Emitter::Emitter()
>
> And in the ocio code it's definitely referenced ( src/core/Config.cpp ):
>
> void Config::serialize(std::ostream& os) const
> {
>     try
>     {
>         YAML::Emitter out;
>
>
>
>
>
>
>
> On Tue, May 1, 2012 at 4:24 PM, Jeremy Selan <jeremy...@...> wrote:
> > Ugh!
>
> > Sorry to hear you've having trouble with static linking.
>
> > Can you post the shell command you're using to build OCIO with?
>
> > (At SPI we happen to only use OCIO in a dynamically linked context so we
> > havent run into this error yet).
>
> > In the latest OCIO release (1.0.7) we bumped the internal yaml-cpp
> > dependency to 0.3.0. I presume you're building 1.0.7?
>
> > A few ideas to test:
> > - Can you confirm that you're using a clean build?  It's possible that if
> > you have old .o files lying around-  built against a prior OCIO - it could
> > cause weirdness.
>
> > - Is it possible that another part of your codebase is statically linking
> > against a different OCIO version? (If you have another part of the code
> > statically links to 0.2.X yaml-cpp, I could imagine a yaml-cpp symbol clash)
>
> > -- Jeremy
>
> > On Tue, May 1, 2012 at 11:35 AM, Piotr Stanczyk <piotr.s...@...>
> > wrote:
>
> >> Hi All,
>
> >> So far I've been using the .so's to link against. However, I've run
> >> into an issue with building a binary that links against the static
> >> libs with a sleuth of errors (see below).
> >> I don't think I did anything unusual in the building of this. I'll
> >> start digging into what could be causing this, but if anyone has any
> >> pointers that would be most welcome.
>
> >> Cheers
>
> >> Piotr
>
> >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
> >> In function `OpenColorIO::v1::Config::serialize(std::basic_ostrea
> >> m<char, std::char_traits<char> >&) const':
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/src/core/Config.cpp:1591:
> >> undefined reference to `YAML::Emitter::Emi
> >> tter()'
>
> >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
> >> In function `operator<<':
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
> >> undefined reference t
> >> o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
>
> >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
> >> In function `operator<<':
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/src/core/Config.cpp:1594:
> >> undefined reference to `YAML::Emitter::Set
> >> LocalValue(YAML::EMITTER_MANIP)'
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/src/core/Config.cpp:1594:
> >> undefined reference to `YAML::Emitter::Set
> >> LocalValue(YAML::EMITTER_MANIP)'
>
> >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
> >> In function `operator<<':
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
> >> undefined reference t
> >> o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
>
> >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
> >> In function `WriteIntegralType<int>':
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:104:
> >> undefined reference t
> >> o `YAML::Emitter::good() const'
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:108:
> >> undefined reference t
> >> o `YAML::Emitter::PreWriteIntegralType(std::basic_stringstream<char,
> >> std::char_traits<char>, std::allocator<char> >&)'
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:110:
> >> undefined reference t
> >> o `YAML::Emitter::PostWriteIntegralType(std::basic_stringstream<char,
> >> std::char_traits<char>, std::allocator<char> > const&)'
>
> >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI O.a(Config.cpp.o):
> >> In function `operator<<':
>
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
> >> undefined reference t
> >> o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
> >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/ima
> >> ....



Piotr Stanczyk <piotr.s...@...>
 

thanks for catching that one Jeremy; I'll pass it onto our build guys.

Alas, my cmake skills are well below par, though I may have a go at this one ..

Piotr

On Fri, May 11, 2012 at 5:25 PM, Jeremy Selan <jeremy...@...> wrote:
Ok, so I'm able to fully reproduce your error when using static linking with
a simple test case.

g++ main.cpp -Ibuild/dist/include -ostatictest
build/dist/lib/libOpenColorIO.a

I created a main.cpp, where all it does is print the name of linear.
https://gist.github.com/2663280

If I manually add the .a for yaml and tinyxml everything works!

g++ main.cpp -Ibuild/dist/include -ostatictest
build/dist/lib/libOpenColorIO.a build/ext/dist/lib/libyaml-cpp.a
build/ext/dist/lib/libtinyxml.a

So as you noted, the static symbols from these two dependencies are not
making into ocio.  I'm not much of a cmake expert, but it doesnt seem like
this would be too hard to patch up.

-- Jeremy


On Fri, May 11, 2012 at 1:08 PM, Jeremy Selan <jeremy...@...>
wrote:

Sorry, i'll try to look into this.

Is anyone out there successfully statically building against OCIO?

-- Jeremy


On Fri, May 11, 2012 at 10:25 AM, Piotr <piotr.s...@...> wrote:

Just checking in to see if anyone has some magic voodoo for this -
thanks

Piotr


On May 7, 4:51 pm, Piotr Stanczyk <piotr.s...@...> wrote:
Hi Jeremy,

Sorry for the delay in getting this info back to you. This is what our
build people say:

We're actually building verison 1.0.6.  This was a clean build, and
we're not using ocio elsewhere in our codebase.  The ocio build was
invoked via:

cmake -D CMAKE_INSTALL_PREFIX=../dist -D CMAKE_SKIP_RPATH=YES -D
PYTHON=/usr/bin/python2.6 ../

Could it be that the symbols from the the YAML and tinxml libs are
hidden in the ocio build?  Is there a way to disable that and make
them all publicly available?  Taking the first undefined reference,
for example:

objdump -tC libOpenColorIO.so.1.0.6 | grep "YAML::Emitter::Emitter"
00000000000cfb00 l     F .text  000000000000006c              .hidden
YAML::Emitter::Emitter()
00000000000cfb70 l     F .text  000000000000006c              .hidden
YAML::Emitter::Emitter()

And in the ocio code it's definitely referenced ( src/core/Config.cpp
):

void Config::serialize(std::ostream& os) const
{
    try
    {
        YAML::Emitter out;







On Tue, May 1, 2012 at 4:24 PM, Jeremy Selan <jeremy...@...>
wrote:
Ugh!
Sorry to hear you've having trouble with static linking.
Can you post the shell command you're using to build OCIO with?
(At SPI we happen to only use OCIO in a dynamically linked context so
we
havent run into this error yet).
In the latest OCIO release (1.0.7) we bumped the internal yaml-cpp
dependency to 0.3.0. I presume you're building 1.0.7?
A few ideas to test:
- Can you confirm that you're using a clean build?  It's possible
that if
you have old .o files lying around-  built against a prior OCIO - it
could
cause weirdness.
- Is it possible that another part of your codebase is statically
linking
against a different OCIO version? (If you have another part of the
code
statically links to 0.2.X yaml-cpp, I could imagine a yaml-cpp symbol
clash)
-- Jeremy
On Tue, May 1, 2012 at 11:35 AM, Piotr Stanczyk
<piotr.s...@...>
wrote:
Hi All,
So far I've been using the .so's to link against. However, I've run
into an issue with building a binary that links against the static
libs with a sleuth of errors (see below).
I don't think I did anything unusual in the building of this. I'll
start digging into what could be causing this, but if anyone has any
pointers that would be most welcome.
Cheers
Piotr

/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
O.a(Config.cpp.o):
In function `OpenColorIO::v1::Config::serialize(std::basic_ostrea
m<char, std::char_traits<char> >&) const':

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
ColorIO-a16d9ac/src/core/Config.cpp:1591:
undefined reference to `YAML::Emitter::Emi
tter()'

/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
O.a(Config.cpp.o):
In function `operator<<':

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
undefined reference t
o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'

/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
O.a(Config.cpp.o):
In function `operator<<':

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
ColorIO-a16d9ac/src/core/Config.cpp:1594:
undefined reference to `YAML::Emitter::Set
LocalValue(YAML::EMITTER_MANIP)'

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
ColorIO-a16d9ac/src/core/Config.cpp:1594:
undefined reference to `YAML::Emitter::Set
LocalValue(YAML::EMITTER_MANIP)'

/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
O.a(Config.cpp.o):
In function `operator<<':

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
undefined reference t
o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'

/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
O.a(Config.cpp.o):
In function `WriteIntegralType<int>':

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:104:
undefined reference t
o `YAML::Emitter::good() const'

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:108:
undefined reference t
o `YAML::Emitter::PreWriteIntegralType(std::basic_stringstream<char,
std::char_traits<char>, std::allocator<char> >&)'

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:110:
undefined reference t
o
`YAML::Emitter::PostWriteIntegralType(std::basic_stringstream<char,
std::char_traits<char>, std::allocator<char> > const&)'

/var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
O.a(Config.cpp.o):
In function `operator<<':

/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
undefined reference t
o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
/home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/ima
....


Jeremy Selan <jeremy...@...>
 

Great, let me know if you find anything.

By the way, this is the line that *should* be doing the static linking:
https://github.com/imageworks/OpenColorIO/blob/master/src/core/CMakeLists.txt#L69

and if I print the variable, it appears to be right:
message(STATUS "EXTERNAL_GENERAL_LIBRARIES: ${EXTERNAL_GENERAL_LIBRARIES}")

-- EXTERNAL_GENERAL_LIBRARIES: /net/homedirs/jeremys/git/ocio.js/build/ext/dist/lib/libtinyxml.a;/net/homedirs/jeremys/git/ocio.js/build/ext/dist/lib/libyaml-cpp.a

(whats going wrong is to be determined...)

-- Jeremy


On Fri, May 11, 2012 at 5:31 PM, Piotr Stanczyk <piotr.s...@...> wrote:
thanks for catching that one Jeremy; I'll pass it onto our build guys.

Alas, my cmake skills are well below par, though I may have a go at this one  ..

Piotr


On Fri, May 11, 2012 at 5:25 PM, Jeremy Selan <jeremy...@...> wrote:
> Ok, so I'm able to fully reproduce your error when using static linking with
> a simple test case.
>
> g++ main.cpp -Ibuild/dist/include -ostatictest
> build/dist/lib/libOpenColorIO.a
>
> I created a main.cpp, where all it does is print the name of linear.
> https://gist.github.com/2663280
>
> If I manually add the .a for yaml and tinyxml everything works!
>
> g++ main.cpp -Ibuild/dist/include -ostatictest
> build/dist/lib/libOpenColorIO.a build/ext/dist/lib/libyaml-cpp.a
> build/ext/dist/lib/libtinyxml.a
>
> So as you noted, the static symbols from these two dependencies are not
> making into ocio.  I'm not much of a cmake expert, but it doesnt seem like
> this would be too hard to patch up.
>
> -- Jeremy
>
>
> On Fri, May 11, 2012 at 1:08 PM, Jeremy Selan <jeremy...@...>
> wrote:
>>
>> Sorry, i'll try to look into this.
>>
>> Is anyone out there successfully statically building against OCIO?
>>
>> -- Jeremy
>>
>>
>> On Fri, May 11, 2012 at 10:25 AM, Piotr <piotr.s...@...> wrote:
>>>
>>> Just checking in to see if anyone has some magic voodoo for this -
>>> thanks
>>>
>>> Piotr
>>>
>>>
>>> On May 7, 4:51 pm, Piotr Stanczyk <piotr.s...@...> wrote:
>>> > Hi Jeremy,
>>> >
>>> > Sorry for the delay in getting this info back to you. This is what our
>>> > build people say:
>>> >
>>> > We're actually building verison 1.0.6.  This was a clean build, and
>>> > we're not using ocio elsewhere in our codebase.  The ocio build was
>>> > invoked via:
>>> >
>>> > cmake -D CMAKE_INSTALL_PREFIX=../dist -D CMAKE_SKIP_RPATH=YES -D
>>> > PYTHON=/usr/bin/python2.6 ../
>>> >
>>> > Could it be that the symbols from the the YAML and tinxml libs are
>>> > hidden in the ocio build?  Is there a way to disable that and make
>>> > them all publicly available?  Taking the first undefined reference,
>>> > for example:
>>> >
>>> > > objdump -tC libOpenColorIO.so.1.0.6 | grep "YAML::Emitter::Emitter"
>>> >
>>> > 00000000000cfb00 l     F .text  000000000000006c              .hidden
>>> > YAML::Emitter::Emitter()
>>> > 00000000000cfb70 l     F .text  000000000000006c              .hidden
>>> > YAML::Emitter::Emitter()
>>> >
>>> > And in the ocio code it's definitely referenced ( src/core/Config.cpp
>>> > ):
>>> >
>>> > void Config::serialize(std::ostream& os) const
>>> > {
>>> >     try
>>> >     {
>>> >         YAML::Emitter out;
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > On Tue, May 1, 2012 at 4:24 PM, Jeremy Selan <jeremy...@...>
>>> > wrote:
>>> > > Ugh!
>>> >
>>> > > Sorry to hear you've having trouble with static linking.
>>> >
>>> > > Can you post the shell command you're using to build OCIO with?
>>> >
>>> > > (At SPI we happen to only use OCIO in a dynamically linked context so
>>> > > we
>>> > > havent run into this error yet).
>>> >
>>> > > In the latest OCIO release (1.0.7) we bumped the internal yaml-cpp
>>> > > dependency to 0.3.0. I presume you're building 1.0.7?
>>> >
>>> > > A few ideas to test:
>>> > > - Can you confirm that you're using a clean build?  It's possible
>>> > > that if
>>> > > you have old .o files lying around-  built against a prior OCIO - it
>>> > > could
>>> > > cause weirdness.
>>> >
>>> > > - Is it possible that another part of your codebase is statically
>>> > > linking
>>> > > against a different OCIO version? (If you have another part of the
>>> > > code
>>> > > statically links to 0.2.X yaml-cpp, I could imagine a yaml-cpp symbol
>>> > > clash)
>>> >
>>> > > -- Jeremy
>>> >
>>> > > On Tue, May 1, 2012 at 11:35 AM, Piotr Stanczyk
>>> > > <piotr.s...@...>
>>> > > wrote:
>>> >
>>> > >> Hi All,
>>> >
>>> > >> So far I've been using the .so's to link against. However, I've run
>>> > >> into an issue with building a binary that links against the static
>>> > >> libs with a sleuth of errors (see below).
>>> > >> I don't think I did anything unusual in the building of this. I'll
>>> > >> start digging into what could be causing this, but if anyone has any
>>> > >> pointers that would be most welcome.
>>> >
>>> > >> Cheers
>>> >
>>> > >> Piotr
>>> >
>>> > >>
>>> > >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
>>> > >> O.a(Config.cpp.o):
>>> > >> In function `OpenColorIO::v1::Config::serialize(std::basic_ostrea
>>> > >> m<char, std::char_traits<char> >&) const':
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/src/core/Config.cpp:1591:
>>> > >> undefined reference to `YAML::Emitter::Emi
>>> > >> tter()'
>>> >
>>> > >>
>>> > >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
>>> > >> O.a(Config.cpp.o):
>>> > >> In function `operator<<':
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
>>> > >> undefined reference t
>>> > >> o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
>>> >
>>> > >>
>>> > >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
>>> > >> O.a(Config.cpp.o):
>>> > >> In function `operator<<':
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/src/core/Config.cpp:1594:
>>> > >> undefined reference to `YAML::Emitter::Set
>>> > >> LocalValue(YAML::EMITTER_MANIP)'
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/src/core/Config.cpp:1594:
>>> > >> undefined reference to `YAML::Emitter::Set
>>> > >> LocalValue(YAML::EMITTER_MANIP)'
>>> >
>>> > >>
>>> > >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
>>> > >> O.a(Config.cpp.o):
>>> > >> In function `operator<<':
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
>>> > >> undefined reference t
>>> > >> o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
>>> >
>>> > >>
>>> > >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
>>> > >> O.a(Config.cpp.o):
>>> > >> In function `WriteIntegralType<int>':
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:104:
>>> > >> undefined reference t
>>> > >> o `YAML::Emitter::good() const'
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:108:
>>> > >> undefined reference t
>>> > >> o `YAML::Emitter::PreWriteIntegralType(std::basic_stringstream<char,
>>> > >> std::char_traits<char>, std::allocator<char> >&)'
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:110:
>>> > >> undefined reference t
>>> > >> o
>>> > >> `YAML::Emitter::PostWriteIntegralType(std::basic_stringstream<char,
>>> > >> std::char_traits<char>, std::allocator<char> > const&)'
>>> >
>>> > >>
>>> > >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
>>> > >> O.a(Config.cpp.o):
>>> > >> In function `operator<<':
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
>>> > >> undefined reference t
>>> > >> o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/ima
>>> > >> ....
>>
>>
>


Colin Doncaster <colin.d...@...>
 

A long shot - but have you checked the order in which the static libraries are being added to the linkers command line?  If they're in the wrong order it might not be resolving the symbols.

From the ld docs:
The linker will search an archive only once, at the location where it is specified on the command line. If the archive defines a symbol which was undefined in some object which appeared before the archive on the command line, the linker will include the appropriate file(s) from the archive. However, an undefined symbol in an object appearing later on the command line will not cause the linker to search the archive again. See the -( option for a way to force the linker to search archives multiple times. You may list the same archive multiple times on the command line. This type of archive searching is standard for Unix linkers.

cheers

On 2012-05-11, at 8:37 PM, Jeremy Selan wrote:

Great, let me know if you find anything.

By the way, this is the line that *should* be doing the static linking:
https://github.com/imageworks/OpenColorIO/blob/master/src/core/CMakeLists.txt#L69

and if I print the variable, it appears to be right:
message(STATUS "EXTERNAL_GENERAL_LIBRARIES: ${EXTERNAL_GENERAL_LIBRARIES}")

-- EXTERNAL_GENERAL_LIBRARIES: /net/homedirs/jeremys/git/ocio.js/build/ext/dist/lib/libtinyxml.a;/net/homedirs/jeremys/git/ocio.js/build/ext/dist/lib/libyaml-cpp.a

(whats going wrong is to be determined...)

-- Jeremy

On Fri, May 11, 2012 at 5:31 PM, Piotr Stanczyk <piotr.s...@...> wrote:
thanks for catching that one Jeremy; I'll pass it onto our build guys.

Alas, my cmake skills are well below par, though I may have a go at this one  ..

Piotr


On Fri, May 11, 2012 at 5:25 PM, Jeremy Selan <jeremy...@...> wrote:
> Ok, so I'm able to fully reproduce your error when using static linking with
> a simple test case.
>
> g++ main.cpp -Ibuild/dist/include -ostatictest
> build/dist/lib/libOpenColorIO.a
>
> I created a main.cpp, where all it does is print the name of linear.
> https://gist.github.com/2663280
>
> If I manually add the .a for yaml and tinyxml everything works!
>
> g++ main.cpp -Ibuild/dist/include -ostatictest
> build/dist/lib/libOpenColorIO.a build/ext/dist/lib/libyaml-cpp.a
> build/ext/dist/lib/libtinyxml.a
>
> So as you noted, the static symbols from these two dependencies are not
> making into ocio.  I'm not much of a cmake expert, but it doesnt seem like
> this would be too hard to patch up.
>
> -- Jeremy
>
>
> On Fri, May 11, 2012 at 1:08 PM, Jeremy Selan <jeremy...@...>
> wrote:
>>
>> Sorry, i'll try to look into this.
>>
>> Is anyone out there successfully statically building against OCIO?
>>
>> -- Jeremy
>>
>>
>> On Fri, May 11, 2012 at 10:25 AM, Piotr <piotr.s...@...> wrote:
>>>
>>> Just checking in to see if anyone has some magic voodoo for this -
>>> thanks
>>>
>>> Piotr
>>>
>>>
>>> On May 7, 4:51 pm, Piotr Stanczyk <piotr.s...@...> wrote:
>>> > Hi Jeremy,
>>> >
>>> > Sorry for the delay in getting this info back to you. This is what our
>>> > build people say:
>>> >
>>> > We're actually building verison 1.0.6.  This was a clean build, and
>>> > we're not using ocio elsewhere in our codebase.  The ocio build was
>>> > invoked via:
>>> >
>>> > cmake -D CMAKE_INSTALL_PREFIX=../dist -D CMAKE_SKIP_RPATH=YES -D
>>> > PYTHON=/usr/bin/python2.6 ../
>>> >
>>> > Could it be that the symbols from the the YAML and tinxml libs are
>>> > hidden in the ocio build?  Is there a way to disable that and make
>>> > them all publicly available?  Taking the first undefined reference,
>>> > for example:
>>> >
>>> > > objdump -tC libOpenColorIO.so.1.0.6 | grep "YAML::Emitter::Emitter"
>>> >
>>> > 00000000000cfb00 l     F .text  000000000000006c              .hidden
>>> > YAML::Emitter::Emitter()
>>> > 00000000000cfb70 l     F .text  000000000000006c              .hidden
>>> > YAML::Emitter::Emitter()
>>> >
>>> > And in the ocio code it's definitely referenced ( src/core/Config.cpp
>>> > ):
>>> >
>>> > void Config::serialize(std::ostream& os) const
>>> > {
>>> >     try
>>> >     {
>>> >         YAML::Emitter out;
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > On Tue, May 1, 2012 at 4:24 PM, Jeremy Selan <jeremy...@...>
>>> > wrote:
>>> > > Ugh!
>>> >
>>> > > Sorry to hear you've having trouble with static linking.
>>> >
>>> > > Can you post the shell command you're using to build OCIO with?
>>> >
>>> > > (At SPI we happen to only use OCIO in a dynamically linked context so
>>> > > we
>>> > > havent run into this error yet).
>>> >
>>> > > In the latest OCIO release (1.0.7) we bumped the internal yaml-cpp
>>> > > dependency to 0.3.0. I presume you're building 1.0.7?
>>> >
>>> > > A few ideas to test:
>>> > > - Can you confirm that you're using a clean build?  It's possible
>>> > > that if
>>> > > you have old .o files lying around-  built against a prior OCIO - it
>>> > > could
>>> > > cause weirdness.
>>> >
>>> > > - Is it possible that another part of your codebase is statically
>>> > > linking
>>> > > against a different OCIO version? (If you have another part of the
>>> > > code
>>> > > statically links to 0.2.X yaml-cpp, I could imagine a yaml-cpp symbol
>>> > > clash)
>>> >
>>> > > -- Jeremy
>>> >
>>> > > On Tue, May 1, 2012 at 11:35 AM, Piotr Stanczyk
>>> > > <piotr.s...@...>
>>> > > wrote:
>>> >
>>> > >> Hi All,
>>> >
>>> > >> So far I've been using the .so's to link against. However, I've run
>>> > >> into an issue with building a binary that links against the static
>>> > >> libs with a sleuth of errors (see below).
>>> > >> I don't think I did anything unusual in the building of this. I'll
>>> > >> start digging into what could be causing this, but if anyone has any
>>> > >> pointers that would be most welcome.
>>> >
>>> > >> Cheers
>>> >
>>> > >> Piotr
>>> >
>>> > >>
>>> > >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
>>> > >> O.a(Config.cpp.o):
>>> > >> In function `OpenColorIO::v1::Config::serialize(std::basic_ostrea
>>> > >> m<char, std::char_traits<char> >&) const':
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/src/core/Config.cpp:1591:
>>> > >> undefined reference to `YAML::Emitter::Emi
>>> > >> tter()'
>>> >
>>> > >>
>>> > >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
>>> > >> O.a(Config.cpp.o):
>>> > >> In function `operator<<':
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
>>> > >> undefined reference t
>>> > >> o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
>>> >
>>> > >>
>>> > >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
>>> > >> O.a(Config.cpp.o):
>>> > >> In function `operator<<':
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/src/core/Config.cpp:1594:
>>> > >> undefined reference to `YAML::Emitter::Set
>>> > >> LocalValue(YAML::EMITTER_MANIP)'
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/src/core/Config.cpp:1594:
>>> > >> undefined reference to `YAML::Emitter::Set
>>> > >> LocalValue(YAML::EMITTER_MANIP)'
>>> >
>>> > >>
>>> > >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
>>> > >> O.a(Config.cpp.o):
>>> > >> In function `operator<<':
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
>>> > >> undefined reference t
>>> > >> o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
>>> >
>>> > >>
>>> > >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
>>> > >> O.a(Config.cpp.o):
>>> > >> In function `WriteIntegralType<int>':
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:104:
>>> > >> undefined reference t
>>> > >> o `YAML::Emitter::good() const'
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:108:
>>> > >> undefined reference t
>>> > >> o `YAML::Emitter::PreWriteIntegralType(std::basic_stringstream<char,
>>> > >> std::char_traits<char>, std::allocator<char> >&)'
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:110:
>>> > >> undefined reference t
>>> > >> o
>>> > >> `YAML::Emitter::PostWriteIntegralType(std::basic_stringstream<char,
>>> > >> std::char_traits<char>, std::allocator<char> > const&)'
>>> >
>>> > >>
>>> > >> /var/tmp-ssd/doNotRemove/builds/zeno3_ssd/RHEL5_AMD64_OPT/lib/libOpenColorI
>>> > >> O.a(Config.cpp.o):
>>> > >> In function `operator<<':
>>> >
>>> > >>
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/imageworks-Open
>>> > >> ColorIO-a16d9ac/build/ext/dist/include/yaml-cpp/emitter.h:152:
>>> > >> undefined reference t
>>> > >> o `YAML::Emitter::SetLocalValue(YAML::EMITTER_MANIP)'
>>> > >> /home/ewimmer/ewimmer_importlibs/importlibs/src/OpenColorIO/ima
>>> > >> ....
>>
>>
>