diff --git a/pkgs/development/libraries/thrift/default.nix b/pkgs/development/libraries/thrift/default.nix
index e1129d25ef4e..191f9da99d10 100644
--- a/pkgs/development/libraries/thrift/default.nix
+++ b/pkgs/development/libraries/thrift/default.nix
@@ -15,6 +15,11 @@ stdenv.mkDerivation {
 
   enableParallelBuilding = true;
 
+  # Fixes build error: <flex>/lib/libfl.so: undefined reference to `yylex'.
+  # Patch exists in upstream git repo, so it can be removed on the next version
+  # bump.
+  patches = [ ./yylex.patch ];
+
   # Workaround to make the python wrapper not drop this package:
   # pythonFull.override { extraLibs = [ thrift ]; }
   pythonPath = [];
diff --git a/pkgs/development/libraries/thrift/yylex.patch b/pkgs/development/libraries/thrift/yylex.patch
new file mode 100644
index 000000000000..3700bc6a4363
--- /dev/null
+++ b/pkgs/development/libraries/thrift/yylex.patch
@@ -0,0 +1,23 @@
+Fixes build error:
+
+  <flex>/lib/libfl.so: undefined reference to `yylex'
+
+The same patch exists in upstream thrift git repo, commit
+ec8daae71004b3c2346bf12b2d74e52ed0815337
+"THRIFT-2386: Thrift refuses to link yylex".
+diff --git a/compiler/cpp/src/main.h b/compiler/cpp/src/main.h
+index 87af5f6..27285f5 100644
+--- a/compiler/cpp/src/main.h
++++ b/compiler/cpp/src/main.h
+@@ -28,8 +28,9 @@
+ /**
+  * Defined in the flex library
+  */
+-
+-int yylex(void);
++extern "C" {
++	int yylex(void);
++}
+ 
+ int yyparse(void);
+