[Vm-dev] Minheadless trial
Ben Coman
btc at openinworld.com
Mon Aug 6 15:54:11 UTC 2018
On 6 August 2018 at 13:22, Ben Coman <btc at openinworld.com> wrote:
> and ends up with 4 link errors (and 6600 warnings)
> Pharo.exe LNK1120 - 1 unresolved external
> Pharow.exe LNK1120 - 1unresolved external
> sqMain.c.obj LNK2019 - unresolved external symbol
_imp_osvm_main referenced in function main
> sqWin32Main.c.obj LNK2019 - unresolved external symbol _imp_osvm_main
referenced in function WinMain
>
> I do see osvm_main is defined here...
> https://github.com/ronsaldo/opensmalltalk-vm/blob/be7b1c03/platforms/
minheadless/common/sqVirtualMachineInterface.c#L618
>
> but I'm stuck, I don't understand why its looking for "_imp_osvm_main"
I see that sqMain.c (
https://github.com/ronsaldo/opensmalltalk-vm/blob/be7b1c03/platforms/minheadless/common/sqMain.c
)
only defines a single function...
#include "OpenSmalltalkVM.h"
int
main(int argc, const char **argv)
{
return osvm_main(argc, argv);
}
To check that the osvm_main function is available to be linked, at the end
of CmakeLists.txt I see...
# Build the VM executable(s)
add_executable(${VM_EXECUTABLE_NAME}
platforms/minheadless/common/sqMain.c)
target_link_libraries(${VM_EXECUTABLE_NAME} ${VM_LIBRARY_NAME}
${VM_DEPENDENCIES_LIBRARIES})
Using
https://stackoverflow.com/questions/9298278/cmake-print-out-all-accessible-variables-in-a-script
I found...
VM_LIBRARY_NAME=PharoVMCore
where that library is defined
VM_CORE_LIBRARY_TYPE=STATIC
add_library(${VM_LIBRARY_NAME} ${VM_CORE_LIBRARY_TYPE} ${VM_SOURCES}
${VM_INTERNAL_PLUGIN_SOURCES})
and an inspection of PharoVMCore.lib (using 7zip to expand it)
shows it contains function osvm_main symbol, but not the "_imp_" prefixed
symbol.
Regarding the "_imp_" prefix, the next to last comment in this thread
* https://software.intel.com/en-us/forums/intel-c-compiler/topic/673427,
gave a hint about the __declspec() needing to be dllexport instead of
dllimport.
The declaration for osvm_main() in OpenSmalltalkVM.h is effectively...
https://github.com/ronsaldo/opensmalltalk-vm/blob/be7b1c03/include/OpenSmalltalkVM.h#L43-L55
# define OSVM_VM_EXPORT __declspec(dllexport)
# define OSVM_VM_IMPORT __declspec(dllimport)
#ifdef BUILD_VM_CORE
# define OSVM_VM_CORE_PUBLIC OSVM_VM_EXPORT
#else
# define OSVM_VM_CORE_PUBLIC OSVM_VM_IMPORT
#endif
OSVM_VM_CORE_PUBLIC OSVMError osvm_main(int argc, const char **argv);
So the following change to sqMain.c fixes the link error...
#define BUILD_VM_CORE
#include "OpenSmalltalkVM.h"
int
main(int argc, const char **argv)
{
return osvm_main(argc, argv);
}
and similar for sqWin32Main.c.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20180806/60c8f71f/attachment.html>
More information about the Vm-dev
mailing list