Dynamic linking implies the use of dynamic link libraries (on Windows) or shared objects (on Linux) and is the same as with other DLLs/SOs. The mechanism of dynamic linking will be briefly covered in the next chapter.
We will, however, build dynamic link libraries and shared objects right now in order to be able to proceed further. Compile the crypto.asm file, setting the ACTIVE_TARGET compile-time variable to TARGET_W32_DLL in order to generate a 32-bit DLL for Windows, and then to TARGET_W64_DLL in order to generate a 64-bit DLL. Keep in mind the fact that changing ACTIVE_TARGET does not affect the name of the output, so we would have to rename the result of each compilation accordingly.
While on Windows you have to simply change the ACTIVE_TARGET compile-time variable and compile by going to Run | Compile in the GUI (or hit Ctrl + F9 on the keyboard), you would have to build object files for Linux and then enter another command in a terminal when on Linux. The command would be one of these:
# For 64-bit output on 64-bit machine
gcc -shared crypto_64.o -o libcrypto_64.so
# For 64-bit output on 32-bit machine
gcc -shared crypto_64.o -o libcrypto_64.so -m64
# For 32-bit output on 64-bit machine
gcc -shared crypto_32.o -o libcrypto_32.so -m32
# For 32-bit output on 32-bit machine
gcc -shared crypto_32.o -o libcrypto_32.so
Having DLLs for Windows and shared objects for Linux, we are now safe to proceed further and see how modules written in Assembly may be integrated with frameworks such as .NET.