Elektron-SDK-1.4.0 Window compile and link issues

I'm migrating from ETA 3.1.0L1 to 3.4.0L1 (Elektron-SDK-1.4.0L1).

The Linux upgrade went fairly smoothly - some includes and libraries have moved around, however it builds and passes it's test suite.

On Windows (VC11) not so much.

We are getting persistent multiply & undefined symbols at link time.

1>librsslVACache.lib(d_main.obj) : error LNK2005: _ansi_pch already defined in librsslVACache.lib(d_main.obj)
1>librsslVACache.lib(d_main.obj) : error LNK2005: _ansi_param already defined in librsslVACache.lib(d_main.obj)
1>librsslVACache.lib(d_main.obj) : error LNK2005: _ansi_spesc already defined in librsslVACache.lib(d_main.obj)
1>librsslVACache.lib(d_main.obj) : error LNK2005: _ansi_chparm already defined in librsslVACache.lib(d_main.obj)
1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_decode already defined in librsslVACache.lib(d_main.obj)
1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_end_of_row already defined in librsslVACache.lib(d_main.obj)
1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_page_columns already defined in librsslVACache.lib(d_main.obj)
1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_page_rows already defined in librsslVACache.lib(d_main.obj)
1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_scroll_bot already defined in librsslVACache.lib(d_main.obj)
1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_set_columns already defined in librsslVACache.lib(d_main.obj)
1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_set_end_of_row already defined in librsslVACache.lib(d_main.obj)
1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_set_rows already defined in librsslVACache.lib(d_main.obj)
1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_set_scroll_bot already defined in librsslVACache.lib(d_main.obj)
1>librsslVACache.lib(d_main.obj) : error LNK2005: null_char already defined in librsslVACache.lib(d_main.obj)
1>librsslVACache.lib(d_main.obj) : error LNK2005: _ansi_do_decode already defined in librsslVACache.lib(d_main.obj)
1>     Creating library C:\src\Agora\trunk\outwell\VC11\x64\binr\libs\agora_lib_UPA.x64.lib and object C:\src\Agora\trunk\outwell\VC11\x64\binr\libs\agora_lib_UPA.x64.exp
1>librssl.lib(ripcsslutils.obj) : error LNK2019: unresolved external symbol __imp_CertCloseStore referenced in function ripcSSLSetupCTXClient
1>librssl.lib(ripcsslutils.obj) : error LNK2019: unresolved external symbol __imp_CertEnumCertificatesInStore referenced in function ripcSSLSetupCTXClient
1>librssl.lib(ripcsslutils.obj) : error LNK2019: unresolved external symbol __imp_CertFreeCertificateContext referenced in function ripcSSLSetupCTXClient
1>librssl.lib(ripcsslutils.obj) : error LNK2019: unresolved external symbol __imp_CertOpenSystemStoreA referenced in function ripcSSLSetupCTXClient
1>C:\src\Agora\trunk\outwell\VC11\x64\binr\agora_lib_UPA.x64.dll : fatal error LNK1120: 4 unresolved externals

We include the following libraries

librsslVA.lib
librsslVACache.lib
libdacs.lib
libansi.lib
librssl.lib

Is there a problem with the Package or am I missing something?

Best Answer

Answers

  • Hi @Gordon.Hunn,

    Try adding the following libs to your link:

    crypt32.lib
    cryptui.lib
    kernel32.lib
  • crypt32.lib has fixed the _Cert* missing references. Thank you.


    However I'm still left with the multiple definitions in librsslVACache.lib

    1>librsslVACache.lib(d_main.obj) : error LNK2005: _ansi_pch already defined in librsslVACache.lib(d_main.obj)

    1>librsslVACache.lib(d_main.obj) : error LNK2005: _ansi_param already defined in librsslVACache.lib(d_main.obj)

    1>librsslVACache.lib(d_main.obj) : error LNK2005: _ansi_spesc already defined in librsslVACache.lib(d_main.obj)

    1>librsslVACache.lib(d_main.obj) : error LNK2005: _ansi_chparm already defined in librsslVACache.lib(d_main.obj)

    1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_decode already defined in librsslVACache.lib(d_main.obj)

    1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_end_of_row already defined in librsslVACache.lib(d_main.obj)

    1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_page_columns already defined in librsslVACache.lib(d_main.obj)

    1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_page_rows already defined in librsslVACache.lib(d_main.obj)

    1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_scroll_bot already defined in librsslVACache.lib(d_main.obj)

    1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_set_columns already defined in librsslVACache.lib(d_main.obj)

    1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_set_end_of_row already defined in librsslVACache.lib(d_main.obj)

    1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_set_rows already defined in librsslVACache.lib(d_main.obj)

    1>librsslVACache.lib(d_main.obj) : error LNK2005: qa_set_scroll_bot already defined in librsslVACache.lib(d_main.obj)

    1>librsslVACache.lib(d_main.obj) : error LNK2005: null_char already defined in librsslVACache.lib(d_main.obj)

    1>librsslVACache.lib(d_main.obj) : error LNK2005: _ansi_do_decode already defined in librsslVACache.lib(d_main.obj)

  • Hi @Gordon Hunn,

    Are you using cache features within the library? If not, you don't need to include it.

  • Hi @Gordon Hunn,

    I looked into one of the example projects (WatchlistConsumer) included within the downloads and here is the list of libs it uses:

    image

  • This might be a red herring - removed librsslVACache.lib and now I see

    1>libansi.lib(d_main.obj) : error LNK2019: unresolved external symbol toascii referenced in function _ansi_pch

    Any idea which lib supplies toascii() ?

  • @Gordon.Hunn,

    Have you tried to build any of the example applications? I would try here first to ensure your environment is working and to provide you with the actual libs to include.

  • I will do that if the issue gets resolved.
    Currently there is still no answer to the multiple definitions issue in the supplied librsslVACache.lib which appears to be a required library.

  • @Gordon Hunn,

    The librsslVACache.lib is not a required lib. Unless you are using a Watchlist cache, can you provide us the reference where you believe it is required? Many of the examples included in the examples area do not require this lib. Also, can you also provide us the results of the build for the WatchList example suggested for you to try (see below)? If you go through the quick start for ETA and follow the instructions to build the examples, this should help you move forward.

  • @""nick.zincone.1

    Please see my last post below. If I remove librsslVACache.lib then I get a toascii undefined symbol. However I cannot figure out what provides this.

    1>libansi.lib(d_main.obj) : error LNK2019: unresolved external symbol toascii referenced in function _ansi_pch

    1>C:\src\Agora\trunk\outwell\VC11\x64\binr\agora_lib_UPA.x64.dll : fatal error LNK1120: 1 unresolved externals


  • @Gordon Hunn,

    Yes, I did see your last post. I also provided you 3 things:

    1. Unless your applications requires a watchlist cache, you don't need the librsslVACache.lib. You have not confirmed this yet.

    2. I also provided you an example of the link line that shows all the required libs when you do need the librsslVACache.lib as part of your application. Did you try all of the libs I provided?

    3. Go through the Quick Start ETA tutorial to build an example application that uses the librsslVACache.lib. Please confirm you are having trouble linking the example applications and then we can follow up with the development team to resolve this.

  • Hi @Gordon Hunn,

    Why are you linking in libansi.lib? Please go through the quick start guide. This will guide you through the build process to compile and link all example applications. You can look at the different project files which will show you all the libs that are required. If you find success in the examples, this will guide you to determine the exact libs you need to include in your own application.

  • @nick.zincone.1

    I'm linking libansi because our application requires it. It has done since UPA7.x & to my knowledge Elektron still publishes pages!

    I'm trying to *upgrade* from ETA 3.1.0, not build your examples for the first time.

    So, please can you tell me which library i need to resolve the toascii external reference in libansi?

  • Ok. Can you please provide me the list of all the libraries you used when you built your exsiting ETA 3.1.0 application? I'm assuming your application compiled and link fine under 3.1.0 but failed using the exact same libraries when using ETA 3.4.0.L1. I couldn't find a ANSI page example among the list of examples to confirm and will have to reach out to the development group to find more details.

    thank you.

  • libs for 3.1.0 build are

    image


    Current libs in 3.4.0 build are (The librsslRDM.lib seems to no longer be available ...)

    image

  • Hello @Gordon.Hunn,

    Just a hunch.

    In your ESDK13 build, do you observe folder:

    esdk13\Elektron-SDK-BinaryPack\Cpp-C\Eta\Utils\Ansi ?

    If you do not observe it in ESDK14 build?

    Can you try copying it into

    esdk14\Elektron-SDK-BinaryPack\Cpp-C\Eta\Utils

    hope this helps

  • The libansi.lib in 1.4 came from

    C:\src\Elektron-SDK-1.4.0.L1.win.rrg\Cpp-C\Eta\Libs\WIN_64_VS110 and was 144KB

    I replaced it with the libansi from 1.2 (which is what I had to hand) - this was as you suggested in
    C:\src\Elektron-SDK1.2.1.win.rrg\Elektron-SDK-BinaryPack\Cpp-C\Eta\Utils\Ansi\Libs\WIN_64_VS110

    and is much bigger @ 517KB

    This resolves the undefined reference - Good call :)

    However, this means that the 1.4 package is incorrect. Please can you liase with Development to get this re-issued.

  • Hello @Gordon.Hunn

    Good to hear. Yes. @nick.zincone.1 is already in the process of raising the question with development, so at some point we may expect an update.