在发布模式下编译时,为什么Godbolt编译器资源管理器不会显示我的函数的任何输出?

时间:2017-08-08 08:26:58

标签: rust

我想使用https://rust.godbolt.org来查看此函数的程序集输出:

Login-AzureRmAccount
$kvSecret = Get-AzureKeyVaultSecret -VaultName "akv-contoso-test" -Name "ContosoFirstCertificate"
$kvSecretBytes = [System.Convert]::FromBase64String($kvSecret.SecretValueText)
$rootCertificate = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 -ArgumentList @($kvSecretBytes, $null, [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable)
$certStore = New-Object System.Security.Cryptography.X509Certificates.X509Store
$certStore.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$certStore.Add($rootCertificate)
$clientCertificate = New-SelfSignedCertificate -Type Custom -KeySpec Signature -Subject "CN=Point To Site VPN Client" -KeyExportPolicy Exportable -HashAlgorithm sha256 -KeyLength 2048 -Signer $rootCertificate -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2")
$securePassword = ConvertTo-SecureString -String "mysecret" -AsPlainText -Force
Export-PfxCertificate -Cert $clientCertificate -Password $securePassword -FilePath "C:\Users\User\Desktop\Certificates\Point To Site VPN Client.pfx" -ChainOption BuildChain
$certStore.Close() 

在网站上粘贴这个工作正常,但显示了很多组装。鉴于fn add(a: u8, b: u8) -> u8 { a + b } 默认情况下在调试模式下编译我的代码,这并不奇怪。当我在发布模式by passing -O to the compiler中编译时,根本没有输出!

我做错了什么?为什么Rust编译器会在发布模式下删除所有内容?

1 个答案:

答案 0 :(得分:15)

Godbolt通过将--crate-type=lib传递给编译器将您的Rust代码编译为库包。图书馆的代码只有在公开的情况下才有用。因此,在您的情况下,您的add()函数是私有的,并且完全从编译器中删除。解决方案很简单:

通过向其添加pub来公开您的功能。现在编译器不会删除该功能,因为它是您库的公共接口的一部分。