Date
1 - 9 of 9
static library linking issues
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. |
|
Jeremy Selan <jeremy...@...>
Great, let me know if you find anything.
toggle quoted message
Show quoted text
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. |
|
Piotr Stanczyk <piotr.s...@...>
thanks for catching that one Jeremy; I'll pass it onto our build guys.
toggle quoted message
Show quoted text
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 |
|
Jeremy Selan <jeremy...@...>
Ok, so I'm able to fully reproduce your error when using static linking with a simple test case.
toggle quoted message
Show quoted text
https://gist.github.com/2663280 If I manually add the .a for yaml and tinyxml everything works!
-- Jeremy On Fri, May 11, 2012 at 1:08 PM, Jeremy Selan <jeremy...@...> wrote: Sorry, i'll try to look into this. |
|
Jeremy Selan <jeremy...@...>
Sorry, i'll try to look into this.
toggle quoted message
Show quoted text
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 - |
|
Piotr <piotr.s...@...>
Just checking in to see if anyone has some magic voodoo for this -
toggle quoted message
Show quoted text
thanks Piotr On May 7, 4:51 pm, Piotr Stanczyk <piotr.s...@...> wrote:
Hi Jeremy, |
|
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! |
|
Jeremy Selan <jeremy...@...>
Ugh!
toggle quoted message
Show quoted text
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, |
|
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 .... |
|