diff --git a/lib/file_generator.dart b/lib/file_generator.dart
index 4290cac..a4c4642 100644
--- a/lib/file_generator.dart
+++ b/lib/file_generator.dart
@@ -239,7 +239,7 @@
   /// Writes the header and imports for the .pb.dart file.
   void writeMainHeader(IndentingWriter out,
       [OutputConfiguration config = const DefaultOutputConfiguration()]) {
-    _writeLibraryHeading(out);
+    _writeHeading(out);
 
     // We only add the dart:async import if there are generic client API
     // generators for services in the FileDescriptorProto.
@@ -357,7 +357,7 @@
     if (!_linked) throw new StateError("not linked");
 
     var out = new IndentingWriter();
-    _writeLibraryHeading(out, "pbenum");
+    _writeHeading(out);
 
     if (enumCount > 0) {
       // Make sure any other symbols in dart:core don't cause name conflicts
@@ -393,7 +393,7 @@
       [OutputConfiguration config = const DefaultOutputConfiguration()]) {
     if (!_linked) throw new StateError("not linked");
     var out = new IndentingWriter();
-    _writeLibraryHeading(out, "pbserver");
+    _writeHeading(out);
 
     if (serviceGenerators.isNotEmpty) {
       out.println('''
@@ -435,7 +435,7 @@
       [OutputConfiguration config = const DefaultOutputConfiguration()]) {
     if (!_linked) throw new StateError("not linked");
     var out = new IndentingWriter();
-    _writeLibraryHeading(out, "pbgrpc");
+    _writeHeading(out);
 
     out.println('''
 import 'dart:async';
@@ -469,7 +469,7 @@
       [OutputConfiguration config = const DefaultOutputConfiguration()]) {
     if (!_linked) throw new StateError("not linked");
     var out = new IndentingWriter();
-    _writeLibraryHeading(out, "pbjson");
+    _writeHeading(out);
 
     // Import the .pbjson.dart files we depend on.
     var imports = _findJsonProtosToImport();
@@ -508,30 +508,13 @@
     return imports;
   }
 
-  /// Writes the library name at the top of the dart file.
-  ///
-  /// (This should be unique to avoid warnings about duplicate Dart libraries.)
-  void _writeLibraryHeading(IndentingWriter out, [String extension]) {
-    Uri filePath = new Uri.file(descriptor.name);
-    if (filePath.isAbsolute) {
-      // protoc should never generate a file descriptor with an absolute path.
-      throw "FAILURE: File with an absolute path is not supported";
-    }
-
-    var libraryName = _fileNameWithoutExtension(filePath).replaceAll('-', '_');
-    if (extension != null) libraryName += "_$extension";
-    if (descriptor.package != '') {
-      // Two .protos can be in the same proto package.
-      // It isn't unique enough to use as a Dart library name.
-      // But we can prepend it.
-      libraryName = descriptor.package + "_" + libraryName;
-    }
+  /// Writes the header at the top of the dart file.
+  void _writeHeading(IndentingWriter out) {
     out.println('''
 ///
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library $libraryName;
 ''');
   }
 
diff --git a/lib/src/dart_options.pb.dart b/lib/src/dart_options.pb.dart
index e730e4a..5d78a27 100644
--- a/lib/src/dart_options.pb.dart
+++ b/lib/src/dart_options.pb.dart
@@ -2,7 +2,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library dart_options_dart_options;
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
diff --git a/lib/src/descriptor.pb.dart b/lib/src/descriptor.pb.dart
index 925a457..e34c94d 100644
--- a/lib/src/descriptor.pb.dart
+++ b/lib/src/descriptor.pb.dart
@@ -2,7 +2,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library google.protobuf_descriptor;
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
diff --git a/lib/src/descriptor.pbenum.dart b/lib/src/descriptor.pbenum.dart
index 1408ca8..601fd97 100644
--- a/lib/src/descriptor.pbenum.dart
+++ b/lib/src/descriptor.pbenum.dart
@@ -2,7 +2,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library google.protobuf_descriptor_pbenum;
 
 // ignore_for_file: UNDEFINED_SHOWN_NAME,UNUSED_SHOWN_NAME
 import 'dart:core' show int, dynamic, String, List, Map;
diff --git a/lib/src/plugin.pb.dart b/lib/src/plugin.pb.dart
index be55531..dd561ba 100644
--- a/lib/src/plugin.pb.dart
+++ b/lib/src/plugin.pb.dart
@@ -2,7 +2,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library google.protobuf.compiler_plugin;
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
diff --git a/test/file_generator_test.dart b/test/file_generator_test.dart
index 4a8d3ed..8412a7f 100644
--- a/test/file_generator_test.dart
+++ b/test/file_generator_test.dart
@@ -77,7 +77,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library test;
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
@@ -141,7 +140,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library test_pbjson;
 
 const PhoneNumber$json = const {
   '1': 'PhoneNumber',
@@ -169,7 +167,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library test;
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
@@ -183,7 +180,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library test_pbenum;
 
 // ignore_for_file: UNDEFINED_SHOWN_NAME,UNUSED_SHOWN_NAME
 import 'dart:core' show int, dynamic, String, List, Map;
@@ -230,7 +226,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library test_pbjson;
 
 const PhoneType$json = const {
   '1': 'PhoneType',
@@ -260,7 +255,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library pb_library_test;
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
@@ -287,7 +281,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library test;
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
@@ -324,7 +317,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library test;
 
 import 'dart:async';
 // ignore: UNUSED_SHOWN_NAME
@@ -373,7 +365,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library test_pbserver;
 
 import 'dart:async';
 
@@ -440,7 +431,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library test;
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
@@ -503,7 +493,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library test_pbgrpc;
 
 import 'dart:async';
 
@@ -662,7 +651,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library test;
 
 // ignore: UNUSED_SHOWN_NAME
 import 'dart:core' show int, bool, double, String, List, override;
@@ -721,7 +709,6 @@
 //  Generated code. Do not modify.
 ///
 // ignore_for_file: non_constant_identifier_names,library_prefixes
-library test_pbjson;
 
 const M$json = const {
   '1': 'M',
