Why do iostream tests link against static libraries ?

"Kuhl, Brian via Boost-build" <[email protected]> Thu, 22 Apr 2021 03:35:36 +0000
Newsgroups gmane.comp.lib.boost.build
Message-ID <DM6PR11MB3914A37D13EEDB0CCA32F02399469@DM6PR11MB3914.namprd11.prod.outlook.com>
--===============0792758300809907393==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_DM6PR11MB3914A37D13EEDB0CCA32F02399469DM6PR11MB3914namp_"

--_000_DM6PR11MB3914A37D13EEDB0CCA32F02399469DM6PR11MB3914namp_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

I'm trying to get iostreams working with shared libraries on VxWorks
The tests will compile with clang  if I comment out the forced dependency o=
n static libraries

But I'd like to understand the reason for forcing a link of static librarie=
s with a dynamic executable?

https://github.com/boostorg/iostreams/blob/4d2e763ba8b88f3350fbea29b54507a3=
f5adf0f0/test/Jamfile.v2#L25

rule test-iostreams ( sources * : requirements * : target-name ? ) {
    return [
            run
                $(sources)
                /boost/test//boost_unit_test_framework # /<link>static
                /boost/filesystem//boost_filesystem    # /<link>static
            : # command
            : # input files
            : # build requirements
                <toolset>msvc:<define>_CRT_SECURE_NO_DEPRECATE
                <toolset>msvc:<define>_SCL_SECURE_NO_DEPRECATE
                <toolset>cw-9.3,<os>darwin:<runtime-link>static
                <define>BOOST_IOSTREAMS_NO_LIB
                <link>shared:<define>BOOST_IOSTREAMS_DYN_LINK=3D1
                $(requirements)
            : $(target-name)
        ] ;
}

If I don't comments I get a link error.
VxWorks only supports -fpic vs -fPIC

clang-vxworks.compile.c++ ../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/=
debug/cross-compile-vxworks/link-static/unit_test_parameters.o
    "wr-c++" -x c++ -Wno-c99-extensions -Wno-variadic-macros -O3 -finline-f=
unctions -Wno-inline -Wall -pedantic -g -Wno-inline -DBOOST_ALL_NO_LIB=3D1 =
-DBOOST_BEAST_ALLOW_DEPRECATED -DBOOST_BEAST_SEPARATE_COMPILATION -I".."  -=
c -o "../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile-=
vxworks/link-static/unit_test_parameters.o" "../libs/test/src/unit_test_par=
ameters.cpp"
clang-vxworks.archive ../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debu=
g/cross-compile-vxworks/link-static/libboost_unit_test_framework.a
  "wr-ar"  rcu "../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cros=
s-compile-vxworks/link-static/libboost_unit_test_framework.a" "../bin.v2/li=
bs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-stati=
c/compiler_log_formatter.o" "../bin.v2/libs/test/build/clang-vxworks-11.0.0=
.1/debug/cross-compile-vxworks/link-static/debug.o" "../bin.v2/libs/test/bu=
ild/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-static/decorato=
r.o" "../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile-=
vxworks/link-static/execution_monitor.o" "../bin.v2/libs/test/build/clang-v=
xworks-11.0.0.1/debug/cross-compile-vxworks/link-static/framework.o" "../bi=
n.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/lin=
k-static/plain_report_formatter.o" "../bin.v2/libs/test/build/clang-vxworks=
-11.0.0.1/debug/cross-compile-vxworks/link-static/progress_monitor.o" "../b=
in.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/li=
nk-static/results_collector.o" "../bin.v2/libs/test/build/clang-vxworks-11.=
0.0.1/debug/cross-compile-vxworks/link-static/results_reporter.o" "../bin.v=
2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-s=
tatic/test_framework_init_observer.o" "../bin.v2/libs/test/build/clang-vxwo=
rks-11.0.0.1/debug/cross-compile-vxworks/link-static/test_tools.o" "../bin.=
v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-=
static/test_tree.o" "../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug=
/cross-compile-vxworks/link-static/unit_test_log.o" "../bin.v2/libs/test/bu=
ild/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-static/unit_tes=
t_main.o" "../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-com=
pile-vxworks/link-static/unit_test_monitor.o" "../bin.v2/libs/test/build/cl=
ang-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-static/unit_test_para=
meters.o" "../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-com=
pile-vxworks/link-static/junit_log_formatter.o" "../bin.v2/libs/test/build/=
clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-static/xml_log_form=
atter.o" "../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-comp=
ile-vxworks/link-static/xml_report_formatter.o"
clang-vxworks.link ../bin.v2/libs/iostreams/test/array_test.test/clang-vxwo=
rks-11.0.0.1/debug/cross-compile-vxworks/array_test.vxe
    "wr-c++"  -o "../bin.v2/libs/iostreams/test/array_test.test/clang-vxwor=
ks-11.0.0.1/debug/cross-compile-vxworks/array_test.vxe"    "../bin.v2/libs/=
iostreams/test/array_test.test/clang-vxworks-11.0.0.1/debug/cross-compile-v=
xworks/array_test.o" "../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debu=
g/cross-compile-vxworks/link-static/libboost_unit_test_framework.a" "../bin=
.v2/libs/filesystem/build/clang-vxworks-11.0.0.1/debug/cross-compile-vxwork=
s/link-static/libboost_filesystem.a" -shared --start-group      --end-group=
  -fpic
/opt/git/vx7/compilers/llvm-11.0.0.1/LINUX64/bin/ldarm: ../bin.v2/libs/test=
/build/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-static/libbo=
ost_unit_test_framework.a(test_tools.o): relocation R_ARM_MOVW_ABS_NC again=
st `a local symbol' can not be used when making a shared object; recompile =
with -fPIC
/opt/git/vx7/compilers/llvm-11.0.0.1/LINUX64/bin/ldarm: ../bin.v2/libs/test=
/build/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-static/libbo=
ost_unit_test_framework.a(test_tree.o): relocation R_ARM_MOVW_ABS_NC agains=
t `a local symbol' can not be used when making a shared object; recompile w=
ith -fPIC

--_000_DM6PR11MB3914A37D13EEDB0CCA32F02399469DM6PR11MB3914namp_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-micr=
osoft-com:office:office" xmlns:w=3D"urn:schemas-microsoft-com:office:word" =
xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" xmlns=3D"http:=
//www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Calibri;
	panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0in;
	font-size:11.0pt;
	font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
	{mso-style-priority:99;
	color:#0563C1;
	text-decoration:underline;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Calibri",sans-serif;
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	font-family:"Calibri",sans-serif;}
@page WordSection1
	{size:8.5in 11.0in;
	margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
	{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext=3D"edit">
<o:idmap v:ext=3D"edit" data=3D"1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=3D"EN-US" link=3D"#0563C1" vlink=3D"#954F72" style=3D"word-wrap:=
break-word">
<div class=3D"WordSection1">
<p class=3D"MsoNormal">I&#8217;m trying to get iostreams working with share=
d libraries on VxWorks<o:p></o:p></p>
<p class=3D"MsoNormal">The tests will compile with clang &nbsp;if I comment=
 out the forced dependency on static libraries<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">But I&#8217;d like to understand the reason for forc=
ing a link of static libraries with a dynamic executable?<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><a href=3D"https://github.com/boostorg/iostreams/blo=
b/4d2e763ba8b88f3350fbea29b54507a3f5adf0f0/test/Jamfile.v2#L25">https://git=
hub.com/boostorg/iostreams/blob/4d2e763ba8b88f3350fbea29b54507a3f5adf0f0/te=
st/Jamfile.v2#L25</a><o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">rule test-iostreams ( sources * : requirements * : t=
arget-name ? ) {<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp; return [<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp; run<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(sources)<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /boost/test//boost_unit_test_framewo=
rk # /&lt;link&gt;static<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /boost/filesystem//boost_filesystem&=
nbsp;&nbsp;&nbsp; # /&lt;link&gt;static<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp; : # command<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp; : # input files<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp; : # build requirements<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;toolset&gt;msvc:&lt;define&gt;_C=
RT_SECURE_NO_DEPRECATE<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;toolset&gt;msvc:&lt;define&gt;_S=
CL_SECURE_NO_DEPRECATE<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;toolset&gt;cw-9.3,&lt;os&gt;darw=
in:&lt;runtime-link&gt;static<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;define&gt;BOOST_IOSTREAMS_NO_LIB=
<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link&gt;shared:&lt;define&gt;BOO=
ST_IOSTREAMS_DYN_LINK=3D1<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(requirements)<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp; : $(target-name)<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ] ;<o:p><=
/o:p></p>
<p class=3D"MsoNormal">}<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">If I don&#8217;t comments I get a link error. <o:p><=
/o:p></p>
<p class=3D"MsoNormal">VxWorks only supports -fpic vs -fPIC<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">clang-vxworks.compile.c++ ../bin.v2/libs/test/build/=
clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-static/unit_test_pa=
rameters.o<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp; &quot;wr-c++&quot; -x c++ -Wno-c9=
9-extensions -Wno-variadic-macros -O3 -finline-functions -Wno-inline -Wall =
-pedantic -g -Wno-inline -DBOOST_ALL_NO_LIB=3D1 -DBOOST_BEAST_ALLOW_DEPRECA=
TED -DBOOST_BEAST_SEPARATE_COMPILATION -I&quot;..&quot;&nbsp; -c -o &quot;.=
./bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks=
/link-static/unit_test_parameters.o&quot;
 &quot;../libs/test/src/unit_test_parameters.cpp&quot;<o:p></o:p></p>
<p class=3D"MsoNormal">clang-vxworks.archive ../bin.v2/libs/test/build/clan=
g-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-static/libboost_unit_te=
st_framework.a<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp; &quot;wr-ar&quot;&nbsp; rcu &quot;../bin.v2/l=
ibs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-stat=
ic/libboost_unit_test_framework.a&quot; &quot;../bin.v2/libs/test/build/cla=
ng-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-static/compiler_log_fo=
rmatter.o&quot;
 &quot;../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile=
-vxworks/link-static/debug.o&quot; &quot;../bin.v2/libs/test/build/clang-vx=
works-11.0.0.1/debug/cross-compile-vxworks/link-static/decorator.o&quot; &q=
uot;../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile-vx=
works/link-static/execution_monitor.o&quot;
 &quot;../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile=
-vxworks/link-static/framework.o&quot; &quot;../bin.v2/libs/test/build/clan=
g-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-static/plain_report_for=
matter.o&quot; &quot;../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug=
/cross-compile-vxworks/link-static/progress_monitor.o&quot;
 &quot;../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile=
-vxworks/link-static/results_collector.o&quot; &quot;../bin.v2/libs/test/bu=
ild/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-static/results_=
reporter.o&quot; &quot;../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/deb=
ug/cross-compile-vxworks/link-static/test_framework_init_observer.o&quot;
 &quot;../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile=
-vxworks/link-static/test_tools.o&quot; &quot;../bin.v2/libs/test/build/cla=
ng-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-static/test_tree.o&quo=
t; &quot;../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compi=
le-vxworks/link-static/unit_test_log.o&quot;
 &quot;../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile=
-vxworks/link-static/unit_test_main.o&quot; &quot;../bin.v2/libs/test/build=
/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-static/unit_test_m=
onitor.o&quot; &quot;../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug=
/cross-compile-vxworks/link-static/unit_test_parameters.o&quot;
 &quot;../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile=
-vxworks/link-static/junit_log_formatter.o&quot; &quot;../bin.v2/libs/test/=
build/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/link-static/xml_lo=
g_formatter.o&quot; &quot;../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/=
debug/cross-compile-vxworks/link-static/xml_report_formatter.o&quot;<o:p></=
o:p></p>
<p class=3D"MsoNormal">clang-vxworks.link ../bin.v2/libs/iostreams/test/arr=
ay_test.test/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/array_test.=
vxe<o:p></o:p></p>
<p class=3D"MsoNormal">&nbsp;&nbsp;&nbsp; &quot;wr-c++&quot;&nbsp; -o &quot=
;../bin.v2/libs/iostreams/test/array_test.test/clang-vxworks-11.0.0.1/debug=
/cross-compile-vxworks/array_test.vxe&quot;&nbsp;&nbsp;&nbsp; &quot;../bin.=
v2/libs/iostreams/test/array_test.test/clang-vxworks-11.0.0.1/debug/cross-c=
ompile-vxworks/array_test.o&quot;
 &quot;../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile=
-vxworks/link-static/libboost_unit_test_framework.a&quot; &quot;../bin.v2/l=
ibs/filesystem/build/clang-vxworks-11.0.0.1/debug/cross-compile-vxworks/lin=
k-static/libboost_filesystem.a&quot; -shared --start-group&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;
 --end-group&nbsp; -fpic <o:p></o:p></p>
<p class=3D"MsoNormal">/opt/git/vx7/compilers/llvm-11.0.0.1/LINUX64/bin/lda=
rm: ../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile-vx=
works/link-static/libboost_unit_test_framework.a(test_tools.o): relocation =
R_ARM_MOVW_ABS_NC against `a local
 symbol' can not be used when making a shared object; recompile with -fPIC<=
o:p></o:p></p>
<p class=3D"MsoNormal">/opt/git/vx7/compilers/llvm-11.0.0.1/LINUX64/bin/lda=
rm: ../bin.v2/libs/test/build/clang-vxworks-11.0.0.1/debug/cross-compile-vx=
works/link-static/libboost_unit_test_framework.a(test_tree.o): relocation R=
_ARM_MOVW_ABS_NC against `a local
 symbol' can not be used when making a shared object; recompile with -fPIC<=
o:p></o:p></p>
</div>
</body>
</html>

--_000_DM6PR11MB3914A37D13EEDB0CCA32F02399469DM6PR11MB3914namp_--

--===============0792758300809907393==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Unsubscribe & other changes: https://lists.boost.org/mailman/listinfo.cgi/boost-build

--===============0792758300809907393==--