[INTERNALS-WIN] MSVC linker error LNK2001: unresolved external symbol "void * _tsrm_ls_cache"
[email protected] (Sankara Jayanth Sudanagunta) Wed, 4 Dec 2024 16:00:33 +0000
| Newsgroups | php.internals.win |
|---|---|
| Message-ID | <PH7PR15MB6382BE1C61F3F105F5E59B58D7372@PH7PR15MB6382.namprd15.prod.outlook.com> |
--_000_PH7PR15MB6382BE1C61F3F105F5E59B58D7372PH7PR15MB6382namp_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Hi team,
I request your help in debugging a PHP extension compilation failure on Win=
dows with MSVC that seems to be related to ZTS/TSRM and environment setup. =
I've earlier raised this GitHub issue on php-src: Windows: MSVC linker erro=
r LNK2001: unresolved external symbol "void * _tsrm_ls_cache" - when buildi=
ng PHP extension<https://github.com/php/php-src/issues/17018>.
The compilation of our extension (CMake is used) with ZTS enabled is failin=
g with below linker errors:
[build] Creating library C:/abc.lib and object C:/abc.exp
[build] file1.cpp.obj : error LNK2001: unresolved external symbol "void * _=
tsrm_ls_cache" (?_tsrm_ls_cache@@3PEAXEA) [C:\workspace\abc.vcxproj]
[build] file2.obj : error LNK2001: unresolved external symbol "void * _tsrm=
_ls_cache" (?_tsrm_ls_cache@@3PEAXEA) [C:\workspace\abc.vcxproj]
We are using these flags on Windows when building our extension:
_CRT_SECURE_NO_WARNINGS
NOMINMAX
PHP_WIN32=3D1
ZEND_WIN32=3D1
ZTS=3D1 # ZTS may not always be on, but main\config.w32.h doesn't seem to=
carry it unlike main/php_config.h on Linux
ZEND_ENABLE_STATIC_TSRMLS_CACHE=3D1
Am I not setting some macro definition required for Windows or something th=
ing I missed when building PHP runtime. I build PHP using the following con=
figure command on the same machine:
configure --disable-phpdbg --enable-intl --enable-mbstring --enable-opcache=
--enable-pdo --enable-soap --enable-sockets --with-curl --with-mysqli --wi=
th-openssl --with-pdo-mysql --with-pdo-sqlite --with-sqlite3 --enable-filei=
nfo --enable-embed --enable-zts
We use the TSRM macros ZEND_TSRMLS_CACHE_DEFINE(). ZEND_TSRMLS_CACHE_EXTERN=
() and ZEND_TSRMLS_CACHE_UPDATE() the usual way that most internal PHP exte=
nsions do i.e., call the EXTERN macro in php_extension.h and the UPDATE mac=
ro in GINIT of our extension, only when ZTS macro is defined. Could you ple=
ase help me resolve this linker issue. Here are some build environment deta=
ils:
PHP version:
PS > php -v
PHP 8.3.12-dev (cli) (built: Dec 2 2024 17:43:09) (ZTS Visual C++ 2019 x64=
)
Copyright (c) The PHP Group
Zend Engine v4.3.12-dev, Copyright (c) Zend Technologies
PHP SDK & MSVC version
PHP SDK 2.3.0
ARCH x64
Visual C++: 14.29.30156.0
Thanks in advance!
Best regards
Sankara Jayanth
--_000_PH7PR15MB6382BE1C61F3F105F5E59B58D7372PH7PR15MB6382namp_
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:Aptos;}
@font-face
{font-family:Consolas;
panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
font-size:11.0pt;
font-family:"Aptos",sans-serif;
mso-ligatures:standardcontextual;
mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#467886;
text-decoration:underline;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Aptos",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:11.0pt;
mso-fareast-language:EN-US;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
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-IN" link=3D"#467886" vlink=3D"#96607D" style=3D"word-wrap:=
break-word">
<div class=3D"WordSection1">
<p class=3D"MsoNormal"><span lang=3D"EN-US">Hi team,<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">I request your help in debuggin=
g a PHP extension compilation failure on Windows with MSVC that seems to be=
related to ZTS/TSRM and environment setup. I’ve earlier raised this =
GitHub issue on
<i>php-src</i>: </span><a href=3D"https://github.com/php/php-src/issues/170=
18">Windows: MSVC linker error LNK2001: unresolved external symbol "vo=
id * _tsrm_ls_cache" - when building PHP extension</a><span lang=3D"EN=
-US">.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">The compilation of our extensio=
n (CMake is used) with ZTS enabled is failing with below linker errors:<o:p=
></o:p></span></p>
<p class=3D"MsoNormal" style=3D"margin-left:36.0pt"><span style=3D"font-siz=
e:8.0pt;font-family:Consolas;color:#7F7F7F">[build] =
Creating library C:/abc.lib and object C:/abc.exp<o:p></o:p></span><=
/p>
<p class=3D"MsoNormal" style=3D"margin-left:36.0pt"><span style=3D"font-siz=
e:8.0pt;font-family:Consolas;color:#7F7F7F">[build] file1.cpp.obj :</span><=
span style=3D"font-size:8.0pt;font-family:Consolas">
<span style=3D"color:#C00000">error LNK2001:</span> <span style=3D"color:#C=
00000">unresolved external symbol "void * _tsrm_ls_cache" (?_tsrm=
_ls_cache@@3PEAXEA)
</span><span style=3D"color:#7F7F7F">[C:\workspace\abc.vcxproj]<o:p></o:p><=
/span></span></p>
<p class=3D"MsoNormal" style=3D"margin-left:36.0pt"><span style=3D"font-siz=
e:8.0pt;font-family:Consolas;color:#7F7F7F">[build] file2.obj :</span><span=
style=3D"font-size:8.0pt;font-family:Consolas">
<span style=3D"color:#C00000">error LNK2001:</span> <span style=3D"color:#C=
00000">unresolved external symbol "void * _tsrm_ls_cache" (?_tsrm=
_ls_cache@@3PEAXEA)</span>
<span style=3D"color:#7F7F7F">[C:\workspace\abc.vcxproj]<o:p></o:p></span><=
/span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><b>We are using these flags on Windows when building=
our extension:</b><o:p></o:p></p>
<p class=3D"MsoNormal" style=3D"margin-left:36.0pt"><span style=3D"font-siz=
e:8.0pt;font-family:Consolas;color:#7F7F7F">_CRT_SECURE_NO_WARNINGS<o:p></o=
:p></span></p>
<p class=3D"MsoNormal" style=3D"margin-left:36.0pt"><span style=3D"font-siz=
e:8.0pt;font-family:Consolas;color:#7F7F7F">NOMINMAX<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"margin-left:36.0pt"><span style=3D"font-siz=
e:8.0pt;font-family:Consolas;color:#7F7F7F">PHP_WIN32=3D1<o:p></o:p></span>=
</p>
<p class=3D"MsoNormal" style=3D"margin-left:36.0pt"><span style=3D"font-siz=
e:8.0pt;font-family:Consolas;color:#7F7F7F">ZEND_WIN32=3D1<o:p></o:p></span=
></p>
<p class=3D"MsoNormal" style=3D"margin-left:36.0pt"><span style=3D"font-siz=
e:8.0pt;font-family:Consolas;color:#7F7F7F">ZTS=3D1 # ZTS may n=
ot always be on, but main\config.w32.h doesn't seem to carry it unlike main=
/php_config.h on Linux<o:p></o:p></span></p>
<p class=3D"MsoNormal" style=3D"margin-left:36.0pt"><span style=3D"font-siz=
e:8.0pt;font-family:Consolas;color:#7F7F7F">ZEND_ENABLE_STATIC_TSRMLS_CACHE=
=3D1
<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US">Am I not setting some macro def=
inition required for Windows or something thing I missed when building PHP =
runtime.
</span>I build PHP using the following <i>configure</i> command on the=
same machine:<span lang=3D"EN-US"><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:8.0pt;font-family:Consolas;=
color:#7F7F7F">configure --disable-phpdbg --enable-intl --enable-mbstring -=
-enable-opcache --enable-pdo --enable-soap --enable-sockets --with-curl --w=
ith-mysqli --with-openssl --with-pdo-mysql
--with-pdo-sqlite --with-sqlite3 --enable-fileinfo --enable-embed </span><=
b><span style=3D"font-size:8.0pt;font-family:Consolas;color:#C00000">--enab=
le-zts<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal">We use the TSRM macros <span style=3D"font-size:8.0p=
t;font-family:Consolas;color:#7F7F7F">
ZEND_TSRMLS_CACHE_DEFINE(). ZEND_TSRMLS_CACHE_EXTERN() and ZEND_TSRMLS_CACH=
E_UPDATE()</span> the usual way that most internal PHP extensions do i.e., =
call the EXTERN macro in php_extension.h and the UPDATE macro in GINIT of o=
ur extension, only when ZTS macro
is defined. Could you please help me resolve this linker issue. Here are s=
ome build environment details:<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal"><b>PHP version:</b><o:p></o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-size:8.0pt;font-family:Consolas;=
color:#7F7F7F">PS > php -v<o:p></o:p></span></p>
<p class=3D"MsoNormal"><b><span style=3D"font-size:8.0pt;font-family:Consol=
as;color:#7F7F7F">PHP 8.3.12-dev</span></b><span style=3D"font-size:8.0pt;f=
ont-family:Consolas;color:#7F7F7F"> (cli) (built: Dec 2 2024 17:43:09=
) (ZTS Visual C++ 2019 x64)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:8.0pt;font-family:Consolas;=
color:#7F7F7F">Copyright (c) The PHP Group<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-size:8.0pt;font-family:Consolas;=
color:#7F7F7F">Zend Engine v4.3.12-dev, Copyright (c) Zend Technologies<o:p=
></o:p></span></p>
<p class=3D"MsoNormal"><b><o:p> </o:p></b></p>
<p class=3D"MsoNormal"><b>PHP SDK & MSVC version</b><o:p></o:p></p>
<p class=3D"MsoNormal"><b><span style=3D"font-size:8.0pt;font-family:Consol=
as;color:#7F7F7F">PHP SDK 2.3.0<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"font-size:8.0pt;font-family:Consol=
as;color:#7F7F7F">ARCH x64<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><b><span style=3D"font-size:8.0pt;font-family:Consol=
as;color:#7F7F7F">Visual C++: &nbs=
p; 14.29.30156.0<o:p></o:p></span></b></p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal">Thanks in advance!<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
<p class=3D"MsoNormal">Best regards<br>
Sankara Jayanth<o:p></o:p></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><span lang=3D"EN-US"><o:p> </o:p></span></p>
<p class=3D"MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>
--_000_PH7PR15MB6382BE1C61F3F105F5E59B58D7372PH7PR15MB6382namp_--