Opened 12 years ago

Closed 12 years ago

#4893 closed Bugs (invalid)

boost_serialization link error under msvc 9.0

Reported by: anonymous Owned by: Robert Ramey
Milestone: To Be Determined Component: serialization
Version: Boost 1.45.0 Severity: Problem
Keywords: Cc:

Description

I`m trying to compile small program using boost_serialization under msvc. I have three simple cases:

1) FAILED!
Jamroot:

using msvc ;

use-project boost : "C:\\Boost\\boost_1_45_0" ;

exe serial : serial.cpp /boost/serialization//boost_serialization ;

Serial.exe.rsp:

"bin\msvc-9.0\debug\threading-multi\serial.obj" 
"C:\Boost\boost_1_45_0\bin.v2\libs\serialization\build\msvc-9.0\debug\threading-multi\boost_serialization-vc90-mt-gd-1_45.lib"    

All full paths are exist!

msvc.link.dll C:\Boost\boost_1_45_0\bin.v2\libs\serialization\build\msvc-9.0\debug\threading-multi\boost_serialization-vc90-mt-gd-1_45.dll
   Creating library C:\Boost\boost_1_45_0\bin.v2\libs\serialization\build\msvc-9.0\debug\threading-multi\boost_serialization-vc90-mt-gd-1_45.lib and objec
t C:\Boost\boost_1_45_0\bin.v2\libs\serialization\build\msvc-9.0\debug\threading-multi\boost_serialization-vc90-mt-gd-1_45.exp
msvc.manifest.dll C:\Boost\boost_1_45_0\bin.v2\libs\serialization\build\msvc-9.0\debug\threading-multi\boost_serialization-vc90-mt-gd-1_45.dll
msvc.link bin\msvc-9.0\debug\threading-multi\serial.exe
LINK : fatal error LNK1104: cannot open file 'libboost_serialization-vc90-mt-gd-1_45.lib'

        call "c:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86 >nul
link /NOLOGO /INCREMENTAL:NO /DEBUG /MACHINE:X86 /subsystem:console /out:"bin\msvc-9.0\debug\threading-multi\serial.exe"   @"bin\msvc-9.0\debug\threading-
multi\serial.exe.rsp"
        if %ERRORLEVEL% NEQ 0 EXIT %ERRORLEVEL%

...failed msvc.link bin\msvc-9.0\debug\threading-multi\serial.exe bin\msvc-9.0\debug\threading-multi\serial.pdb...
...failed updating 2 targets...
...updated 34 targets...

2) FAILED!
Jamroot:
using msvc ;

use-project boost : "C:\\Boost\\boost_1_45_0" ;

exe serial : serial.cpp /boost/serialization//boost_serialization : 
<link>static <runtime-link>static ;

All paths from serial.exe.rsp are exist too.

...
compile-c-c++ C:\Boost\boost_1_45_0\bin.v2\libs\serialization\build\msvc-9.0\debug\link-static\runtime-link-static\xml_archive_exception.obj
xml_archive_exception.cpp
compile-c-c++ C:\Boost\boost_1_45_0\bin.v2\libs\serialization\build\msvc-9.0\debug\link-static\runtime-link-static\shared_ptr_helper.obj
shared_ptr_helper.cpp
msvc.archive C:\Boost\boost_1_45_0\bin.v2\libs\serialization\build\msvc-9.0\debug\link-static\runtime-link-static\libboost_serialization-vc90-sgd-1_45.lib

stl_port.obj : warning LNK4221: no public symbols found; archive member will be inaccessible
msvc.link bin\msvc-9.0\debug\link-static\runtime-link-static\serial.exe
LINK : fatal error LNK1104: cannot open file 'libboost_serialization-vc90-mt-sgd-1_45.lib'

        call "c:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86 >nul
link /NOLOGO /INCREMENTAL:NO /DEBUG /MACHINE:X86 /subsystem:console /out:"bin\msvc-9.0\debug\link-static\runtime-link-static\serial.exe"   @"bin\msvc-9.0\
debug\link-static\runtime-link-static\serial.exe.rsp"
        if %ERRORLEVEL% NEQ 0 EXIT %ERRORLEVEL%

...failed msvc.link bin\msvc-9.0\debug\link-static\runtime-link-static\serial.exe bin\msvc-9.0\debug\link-static\runtime-link-static\serial.pdb...
...failed updating 2 targets...
...updated 32 targets...

3) WORKS!

using msvc ;

use-project boost : "C:\\Boost\\boost_1_45_0" ;

exe serial : serial.cpp /boost/serialization//boost_serialization 
link<static> ;

So where is problem?
Is only one possible configuration for building serialization library under msvc?

Change History (6)

comment:1 by anonymous, 12 years ago

Summary: boost_serialization link error under msvc 8.0boost_serialization link error under msvc 9.0

comment:2 by Robert Ramey, 12 years ago

Resolution: invalid
Status: newclosed

I'm pretty sure this isn't a serialization library question but rather a bjam question. So I don't think I can help here. That is, I don't think this can be addressed from the serialization library source code. Try posting this on the boost/build list.

Robert Ramey

comment:3 by anonymous, 12 years ago

I can link with other libraries, boost_program_options for instance, but not with boost_serialization. So I think it`s a serialization library problem. Am I right?

comment:4 by anonymous, 12 years ago

Resolution: invalid
Status: closedreopened

I have tested thread, regex, program options and other libs. Only the serialization lib doesn`t link.

P.S. With msvc 8.0 I have the same results.

comment:5 by anonymous, 12 years ago

I submitted this issue to boost.build (#4901) and steven_watanabe said:

"You need to add <define>BOOST_ALL_NO_LIB to disable auto-linking. I think other libraries probably already disable auto-linking in their usage requirements."

I checked. It works. So it`s going to be a serialization lib issue.

comment:6 by Robert Ramey, 12 years ago

Resolution: invalid
Status: reopenedclosed

1) It looks like your creating a DLL boost_serialization-vc90-mt-gd-1_45.dll with import library boost_serialization-vc90-mt-gd-1_45.lib but trying to link statically with it libboost_serialization-vc90-mt-gd-1_45.lib. This can never work and that's why the names are different - just to prevent this from being possible.

2) This is better, you're creating a static library libboost_serialization-vc90-sgd-1_45.lib as a single threaded library, but linking a main program compiled with multi-threaded code. That's why it's looking for with a libboost_serialization-vc90-mt-sgd-1_45.lib) This can work, but it also crash for no apparent reason. The auto link in preventing your from creating this type of problem.

3) This overrides all the checking above so your application might SEEM to work but can fail in a catestrophic and unpredictable way.

Suggestion. Make sure your main program and the libraries are built with the same settings.

I don't know why the other libraries worked - maybe the main program had different settings or maybe the library was built with different settings. I can't speak to that.

Robert Ramey

Note: See TracTickets for help on using tickets.