FreeBSD does hat have -ldl. 
 
Instead of unconditionally passing 'dl' to the linker, use cmakes 'CMAKE_DL_LIBS' [1] 
which handles that properly on all systems.

[1] https://cmake.org/cmake/help/v3.6/variable/CMAKE_DL_LIBS.html

--- src/CMakeLists.txt.orig        2017-03-27 09:04:12 UTC
+++ src/CMakeLists.txt
@@ -265,9 +265,9 @@ if ( MSVC )
     TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${SSH_LIBRARIES} )
 else()
     if ( UNIX AND NOT FREEBSD )
-        TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} dl ${EXPAT_LIBRARIES} )
-        TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} dl ${CURL_LIBRARIES} )
-        TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} dl ${SSH_LIBRARIES} )
+        TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${CMAKE_DL_LIBS} ${EXPAT_LIBRARIES} )
+        TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${CMAKE_DL_LIBS} ${CURL_LIBRARIES} )
+        TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${CMAKE_DL_LIBS} ${SSH_LIBRARIES} )
     else()
         TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${EXPAT_LIBRARIES} )
         TARGET_LINK_LIBRARIES( exiv2lib ${PRIVATE_VAR} ${CURL_LIBRARIES} )
